ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6157|回复: 14

[交流] [转帖]偶然看到这篇文章,有教有乐.

[复制链接]

TA的精华主题

TA的得分主题

发表于 2006-6-13 17:17 | 显示全部楼层 |阅读模式
1. 问题由来 当一个漂亮MM向你请教如何录制并修改一个宏,把她每次的实验数据(几十个数据文件)导入Excel时,你感慨道:“很多Excel专家会录制一个宏来解决问题,然后每次使用的时候修改代码并粘贴到需要的地方,对于一个合格的程序员,这是最要命的事情。” 漂亮MM打断并告诉你,她不是程序员,也不想做程序员,然后命令你开始工作。 2. 通过录制宏导入数据 对于这个无法拒绝的MM,你只好垂头丧气的开始面对要解决的问题,想着MM几年后博士毕业,年薪至少5万,干个3、5年,年薪10万,还有项目提成,平时吃饭、打车、买可乐都可以报销,当然不会像你放弃了自己的专业,做了一个为生计奔波的程序员。 数据文件是仪器生成一系列文本格式的数据文件,格式完全一样,目的是要把每个数据文件导入到Excel中作为一条记录,也就是一行。那么,你想,可以用VBA写一个程序,然后定位到需要的位置,读入需要的信息就可以了[①]。你打开Excel,打开VBA编辑器,准备开始写代码。 “开始录宏吧”,MM提醒了心不在焉的你,你沉默了0.1秒,默念了一下VBA的信条:“万不得已不要写代码,尽量使用Office的功能”。于是你启动Excel打开这个文本文件,按照弹出的文本文件导入向导对话框的步骤,使用固定列宽导入了需要的数据。数据包括2部分,第一部分是文件头,包括一些数据信息,后面是按行放置的数据,包括结果和误差,MM要的是后边的数据,要把每行的数据和误差放置到相邻的两列(见下图)。 图 1数据文件部分和需要在Excel中的结果数据 明白了问题,一切就好办了,打开Excel,然后开始录制宏:首先打开文件,通过导入文本文件向导,读入数据,将特定单元格的数据拷贝到一个目标Excel文件中,然后关闭这个文本文件,停止录制宏。 录制的宏很长,大概包括2部分。第一部分是一句打开文件,格式转换的操作,后边一部分是激活不同的文件,拷贝和粘贴不同的Range。你删除掉刚才拷贝进来的数据,运行了一下这个宏,很好,需要的数据进来了。 3. 修改宏导入成批数据 MM提醒你,这个她也能做到,但怎么样把所有的数据文件都导入进来。你看看她带来的文件,文件名是“r20041124001357.txt”、“r20041124001358.txt”、“r20041124001359.txt”、“r20041124001360.txt”之类,大概是时间加序列吧。 你想,嗯,写一个循环就可以了,你打开了刚才录制的宏,检查了一下MM带来的文件,文件名最后2位从46到89,你可以写一个i从1到44的循环,把读入文件部分的文件名改为: "r200411240013" & ( i + 45 ) & ".txt" 把粘贴目的地(range)表示行数的数字用i替换。 OK,你按下了执行按钮,每次关闭文件的时候,有一个讨厌的是否保存文件的对话框跳出来,其他好像一切正常,还好,点击了44次鼠标后[②],MM得到了需要的数据。 4. 修改VBA代码实现一个可通用的宏 4.1. 指定要导入的文件 当MM向你请教如何更改循环以导入不同的文件的数据时,你程序员的劣根性又开始冲动,你想通过一个打开文件对话框来指定需要的文件。你觉得实现应该不复杂,通过一个打开文件对话框,选择一系列文件,然后将文件全路径存入一个集合或数组,然后循环读出这些文件就可以了。 你先创建了一个窗体,然后放置了一个按钮,将CommonDialog控件引入工程,添加到窗体,在按钮的点击事件里加入如下代码: Dim strFiles As String, i As Long With CommonDialog1 .Flags = &H200& Or &H80000 '可以选择多个文件 .ShowOpen If .FileName <> "" Then strFiles = .FileName End If End With '分割返回值,返回值为以ASCII码为0的分割的字符串 '字符串第一个为路径,之后为单个文件名 Files = Split(strFiles, Chr(0)) For i = 1 To UBound(Files) Step 1 Files(i) = Files(0) & "\" & Files(i) '连接路径和文件名,组成文件数组 Next i 代码不多,最后的文件列表保存在Files数组里。因为第一次使用CommonDialog控件打开多个文件,查找出多个文件的分割符号是ASCII码为0的字符费了你不少时间。你开始查了文档,没有得到信息;将FileName属性用Msgbox输出只有路径,在调试状态跟踪时是一个怪字符分割的;你开始想想应该是Tab或者回车之类的,然后使用这些字符用Split函数分割,没有成功;只好测试了,你将所有字符使用ASC函数输出,发现原来是ASCII码为0的字符。你想,微软的文档向来不错,为什么这个在帮助里没有呢? 后面的部分就简单了。 For i = 1 To UBound(Files) Step 1 strFilename = Files(i) DoImport strFilename Next i 把原来的宏修改后保存在DoImport这个过程里,传入文件名即可导入这个文件,循环导入所有文件就可以了。虽然程序功能复杂了,但代码似乎要有条理了。 4.2. 指定要导入的位置 聪明绝顶的MM很高兴,马上又举一反三,提出应该可以指定从第几行开始导入。你脑子转了一下,认为这个需求属于合理需求[③],不能不予理会。 给窗体加一个RefEdit,点击开始的区域后返回的将是一个引用位置的字符串,使用Range函数得到该区域的引用对象(Range对象),然后就可以得到其开始行数: Range(Me.RefEdit1.Value).Row 重构一下DoImport这个过程,增加一个mRow参数,将导入的数据全部写到第mRow行。上面的调用过程就变成了: dim mRow as long mRow = Range(Me.RefEdit1.Value).Row For i = 1 To UBound(Files) Step 1 strFilename = Files(i) DoImport strFilename, mRow mRow = mRow + 1 Next i 你终于松了一口气,脸上又浮现出了贼贼的笑容。MM也答应要请你吃饭,不过你知道兑现的可能性不大,最后还可能是MM请客你掏钱,不过不要紧,程序员的最起码的风度和尊严还是要维护的。 4.3. 修改导入规则 你忽然觉得灵感一现,甚至想做一个可以导入各种格式文件的通用模块,然后作为加载宏发布,于是很多实验室都开始用你的程序,你开始狂收注册费,Gates也坐不住了,要把你的程序买了OEM在Excel里…… 这时,呆在一旁的MM敲了一下你的头,把手舞足蹈的你拉回了现实。 5. 总结 晚上,你打开了日志,写道“替Girl friend MM解决问题一个”。 你想,今天的问题很简单,不过,解决的问题好像很管用,这大概就是所谓的VBA之道吧,以前似乎见过一个VB之道的帖子,你决定回头也写一个VBA之道。那么,第一条应该是: 录制宏,但要修改它! 原文: http://maweifeng.cnblogs.com/archive/2004/12/09/74985.html
[此贴子已经被作者于2006-6-13 17:18:11编辑过]

TA的精华主题

TA的得分主题

发表于 2006-6-13 21:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-6-13 23:30 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

支持一下.[em23]

TA的精华主题

TA的得分主题

发表于 2006-6-13 23:37 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
录制宏是VBA学生最好的老师

TA的精华主题

TA的得分主题

发表于 2006-6-15 12:33 | 显示全部楼层
说到趣味,还得看看这个。 给MM修电脑的三个步骤 给MM修电脑的三个步骤! 表演篇 1、一定要打预防针! 在修之前,向MM反复声明,这电脑鼓掌是有硬件和软件之分的,如果是硬件故障, 例如显卡风扇不转了,显示器连线老化,显示器分辨率超出显示器指标,等等都会 导致黑屏啊,这个我不回家用专门的工具是修不好的! 这样一旦真的没修好,就立刻耸肩膀作无奈装:真的是硬件问题,还是送去保修吧 。而MM当作硬件问题去保修,JS大人即使发现是软件问题,也会毫不犹豫作为硬件 问题处理,所以决计不会有败露的麻烦 2、重装是万能药方! 不管发生什么,只要MM同意,一律重装系统!这是最简单的方法,虽然很菜。但是 如果要感动MM,这也是最好的方法,因为MM会在漫长的等待中觉得你真是很有耐心 和爱心的好男人!哈哈哈哈,太阴险了,所以给恐龙修电脑,一般还是对症下药, 速战速决,不要绿我,确实当恐龙看上你的时候,你就知道这不是RPWT,而是生命 问题! 3、关心要无所不在! 如果选择重装,一定要反复问MM:真的可以吗?MM第一遍一般就说可以,这时候要 问:没有重要的照片、文档吗?MM会犹豫,但是还是会说不要好了;这时候接着问 :QQ聊天记录也会丢掉的!MM会说不要了;记着这时要作思考状,然后问:有没有 重要的邮件啊,邮件也会丢掉的。一般啊,很多MM这个时候会反悔,她们就会觉得 你是超级贴心人了。 如果选择打开机箱,一定要作惊讶状!怎么这么多灰尘啊!!!(我只见过一个MM 的机箱里没有灰尘的,她是实在太爱干净了)这时候MM一般都会不知道怎么回答, 你立刻要作出为电脑难过的样子:这么好的电脑,灰尘太多怎么跑得快啊,散热也 会受影响的,当然容易出问题了。哈哈哈哈,MM内疚的同时就会觉得你这个人特别 懂得爱惜珍惜疼惜是新好男人。 技术篇: 1、MM电脑出的通常都是弱智问题 所以不要用特别专业的眼光去分析,一般都是系统设置没设置好,例如曾经一个MM ,帮她新配的电脑,说音箱左边的不响,过去检查,果然不响,怎么调都只有电流 声,心想坏了,买到坏的了,结果不死心一看,音量控制里她全搁到右声道了,昏 死! 对于显示屏黑屏这种事情,要多看看显示器开关有没有开,显示器有没有插上电源 ,显示器线有没有连到主机等等问题! 稍微高级一点,看看BIOS设定,显示器分辨率设定,对比度设定等等 再高级一点,看看是不是显卡风扇停转了 在有别的电脑的情况下,和别的电脑对调一下显示器看看,容易分辨是不是显示器 的问题,但是要注意,要是女生寝室的话,慎用!!!因为女生寝室一般好像关系 都不好,就是好也不愿意为别人的电脑奉献自己的电脑,这一点和男生寝室不一样 ,要鄙视一下! 要想帅,带上可以外接显示器的本本去,要轻薄的,2.3kg以上就不要驮过去丢脸 了 2、要想酷、拆机箱 不管是不是硬件问题,如果你想MM崇拜到要嫁给你的地步,记住一定要带上一根较 大的十字起子,推荐电脑城装机的那种,很长很长的,超帅!我一般带上两根,一 个十字头,一个一字头,一个红色有机玻璃柄,一个绿色玻璃柄,就像两把短剑, 有了这两柄利器,感觉立马不一样!MM立刻觉得你就是专业的,如果MM看到后觉得 害怕,别忘趁势解释一句:修的多了,随身带着方便,你的问题不一定那么大,或 许用不上。MM这个时候只会希望自己的电脑坏的彻底一点,好见识你挥动长剑的潇 洒身姿!哈哈哈哈,这句是丫丫而已。 3、熟练掌握BIOS设定的窍门是看说明书! 其实很多时候问题和解决问题的方法都在BIOS设定上,例如老肯必须掌握的光驱启 动,就在BIOS设定里面,这个时候万一忘记了怎么办,求助于说明书吧!!!其实 在说明书中,一般都有详尽的说明,甚至包括常见问题的解决方法,只是MM们比较 娇嫩,不适宜阅读这么生硬的文字罢了你的责任就是阅读它们!!! 不要觉得临时看说明书很丢脸!如果说拆机箱可以展现你武的一面,那么你专注阅 读的神情正是你展现自己文的一面最好机会!!!能文能武才是你获取MM芳心的致 胜法宝,只知道挥着袖子与主板上的灰尘大战的土匪只会让MM觉得这些喜欢硬件的 GG都是脏兮兮的疯子。 而你要求获得主板、显卡及其他相关说明书最好的方法,要么就是一开始索要,一 进门就让她把她放这些东西的盒子搬出来放好;要么就是拆开机箱以后,惊讶一句 :啊!这不是公版设计,我要看一下出厂时的说明书!!!甭管是什么设计,你这 一句话出去,MM只会觉得你暴有水准,一眼就能看出是什么设计,其实她们也不知 道什么叫公版设计母版设计的。 感情篇 1、MM的电脑永远都是最好的 MM一般最要面子(当然GG也要,例如老肯),但是找你修电脑总是电脑出了问题, 所以你这个时候一定不能在伤口上散盐,切忌在修电脑的时候说:啊这种配置啊, 该升级了。或者:这种杂牌的显卡最好不要用。或者:AOC的显示器最烂了。表以 为这样可以显示你对硬件市场品牌的了解和个人的品位,这只会让MM恨死你!早期 我就犯过类似口不遮拦的错误,结果有一段时间MM们电脑坏了也不敢来找我,唉, 前车之鉴啊! 对于MM的电脑,如果牌子好,哪怕是集成主板,也要说这个牌子我最喜欢了,稳定 性超好,这次多半是软件问题,D版毛病就是多!(甭管她机子装的系统是不是正 版,用的软件总有盗版吧)如果牌子不好,立刻说,这个牌子性价比一直就是最好 的,你真会过日子!不要忘记说“你真会过日子”的时候,一定要注视MM面带百分 百诚恳的微笑!!!如果真的什么都不行,就是完全该被淘汰的机子,尽量就不要 说话了!!!说什么只会让场面更难堪!!! 把电脑当作MM的脸,你就知道该怎么做了! 2、准确把握时间 营造相遇空间 一般MM让你修电脑,如果答谢的话,一般都是请你吃饭,如果她请你吃饭的规格远 远超过正常修电脑的花费,不妨检查一下电脑是否有人为破坏的因素 对于不同的MM,土匪当然是有的求之不得,有的避之不及因而准确控制维修过程的 时间就很重要。这里教初学者一些计算时间的方法: 用GHOST装一个XP系统,一般是25分钟左右(如果你很熟练,20分钟内就够了) 用自动方式装一个XP系统,大约是1个小时(具体没算过,如果是烂威盛主板,装 好驱动还不止) 装一个OFFICE,大约还是要半个小时(这个可以在自定义里中选择,想拖延时间就 全选,大概可以多争取半小时) 时间还不到吃饭时间,或者时间到了吃饭时间但是你不想去,都可以通过装软件来 慢慢消耗,实在不行,就卸载了多装几遍! 当你长年累月修电脑产生厌烦心理时,推荐使用市面上的高度集成版的XP的GHOST 版,一次把乱七八糟的软件都给装上了,整个时间和装一个XP干净系统也差不多, 装完就走人,又快又省事如果老肯可以到这个境界的话,应该是已经结婚了 3、修理MM电脑的过程也是检查MM人品的过程 实际上利用修电脑这一机会来泡MM的土匪,一般平时都是花了较多时间陪着自己的 电脑和网友,没有太多时间和固定场所(例如大学自修室、英语角或者公共社交场 所)接触真实MM的人。很多这方面的高手也都是成功地在修好电脑的同时弥补了自 己姻缘的缺憾,顺利找到另一半!但是并不是所有的相遇都是美满的结局,这除了 土匪个人的RPWT,主要还在于他们在修理电脑的时候没有注意MM们的RPWT。给出一 些个人建议: 如果MM只会站在一边看着你修,连杯水都不给你倒,除非她年纪太小太不懂事,不 然这样的MM基本不懂关心照顾别人,也不懂尊重别人的劳动和付出。这样的MM若不 是超级大美女,还是算了! 如果MM会一直问这问那,特别是如果主要问你为什么要这样修的原因,这种MM不够 重视分工,喜欢主导一切,不能够尊重权威和相信理性,娶回家只会让你多一个唠 唠叨叨的监工。如果你不喜欢被人呼来唤去,没有自疟倾向,这种MM还是算了! 如果MM一直问你要不要喝水,要不要歇一会儿,还问一些和修电脑无关的情况,例 如问你这么好的技术都怎么学来的啊,如果殷勤到一反常态的地步,恭喜你!这个 MM想泡你!!!如果这个MM一贯对人热情,那么这种MM属于擅长公关,有很强的管 理和组织能力,这种MM也会成为未来家中的主管,但是好在是一种以人为本的管理 ,你不至于太痛苦这样的MM,只要平时不是那种过分往上爬巴结领导的类型,实际 上还算不错的选择 如果MM话并不多,默默地给你倒杯水,然后再一旁看着,不时跑过来帮你递东西, 这种是贤妻良母型,是那种甘愿在背后默默支持你的类型,你要是事业主导型的土 匪,毫不犹豫泡这个MM吧!!!极品赞不绝口。(就是恐龙也不妨考虑一下) 如果MM给你东西吃,证明对你不见外;从来没见过的MM话,证明对你很有好感!小 子,你赚了! MM站着看你修电脑,有座位不坐,离得近的是关心电脑!离得远的还站着,如果不 是眼睛超好的那种,这种MM有同甘共苦的意识,一般富有同情心,比较爱国(自己 到时候对照一下) MM坐着看你修电脑,正常;MM坐着但是不看你,眼光会游移到别的地方或者做自己 的小动作,死了心吧!她已经有意中人了! MM躺着看你修电脑(还真的有!)遇到的都是和我太熟悉的才这样!第一次就这样 没遇到过,真有的话,就是RPWT!!! MM在你修电脑的时候去洗澡了(遇到一次!)这个MM如果不是三天没洗澡,那就是 把你当成家人看待了,我觉得关系很熟这样的话就不算什么;如果第一次就这样, 建议逃走或者躺下!!! MM修电脑的时候把父母介绍给你(到她家修电脑)或者给你看她存在电脑上家人的 照片,她很希望成为你重要的朋友。 MM修电脑的时候把MM介绍给你,电脑其实没问题,这个MM觉得你人不错,肥水不流 外人田,便宜自己的姐妹先;或者她姐妹最近刚失恋,需要找个凯子过渡一下

TA的精华主题

TA的得分主题

 楼主| 发表于 2006-6-15 17:26 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-6-15 17:55 | 显示全部楼层
以下是引用[I]ldy888[/I]在2006-6-15 17:26:15的发言:[BR]

很土地问一句,什么是RPWT?

人品问题

TA的精华主题

TA的得分主题

发表于 2006-6-28 22:32 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2006-6-29 22:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

挺逗的。

TA的精华主题

TA的得分主题

发表于 2007-1-10 08:19 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-10-4 16:34 , Processed in 0.045009 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表