ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] 求助字典高手帮我做个英语单词查询

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-9-4 21:55 | 显示全部楼层
renahu 发表于 2014-9-4 19:49
虽然搞得头晕脑胀,终于还是把代码看明白了,老师真是厉害啊,为了保持原词库的顺序早早地用Flrr为后面制 ...

理解正确,而且表述简洁到位。给你留道作业,有兴趣就做做,修改程序,要求用一个数组取代crr与brr。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-4 22:12 | 显示全部楼层
本帖最后由 renahu 于 2014-9-4 22:28 编辑
山菊花 发表于 2014-9-4 21:55
理解正确,而且表述简洁到位。给你留道作业,有兴趣就做做,修改程序,要求用一个数组取代crr与brr。


晕,脑子里一片空白,我的水平也就能读,不会写,不过受到老师夸奖,还是很荣幸的,呵呵,而且简单的,我也会照猫画虎。不过老师,我觉得这个最新版代码虽然完全实现了我希望的功能,但看了代码后,从我这个外行角度看,总觉得还是有点别扭,我希望的是哪个部位需要更新,就动哪儿的数据,别的数据一概不动,假如我的原词库有一百个单词表的单词,我只是增加一个表或更新了一个表里的某个单词,那么我就要把更新了的这个表的单词都提取到brr里,原表在crr里,还要知道所有表的首尾单词的行值,最后组装一个dc,再把原词库用dc替换掉,好像动静太大了吧。我觉得以老师的写代码能力应该可以通过C列查找并且定位需要更新的单词表的区域,把改动过的表先装进数组,然后直接赋值给这个区域不就行了,如果多选就用for。。next循环语句一个一个替换,如果是新表,就直接放在原词库尾部,呵呵,这只是我这个外行的直白理解,不知道技术上是不是有别的难度,老师您怎么理解?

TA的精华主题

TA的得分主题

发表于 2014-9-4 22:37 | 显示全部楼层
这个问题还是留给你以后解答,等你会写程序时回过头想想这个问题一定很有趣。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-4 23:15 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 renahu 于 2014-9-4 23:23 编辑
山菊花 发表于 2014-9-4 22:37
这个问题还是留给你以后解答,等你会写程序时回过头想想这个问题一定很有趣。


老师您还是直接跟我说吧,我学程序也就想照猫画虎做些简单的,对自己工作学习有帮助就可以了,也没打算深学,要我像老师那样写程序,这辈子我是不指望了,您就简单跟我说说吧,呵呵,我真的很好奇,怎么就不行呢?而且我也好奇,除了老师为什么那么多高手都不愿意写这个代码,是难还是别的原因?我之前也发过类似的求助贴,他们都挺踊跃挺热心的,所以说心里话,我是很感激老师您的,因为这个问题,只有您一直热心帮我。

TA的精华主题

TA的得分主题

发表于 2014-9-5 08:27 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
renahu 发表于 2014-9-4 23:15
老师您还是直接跟我说吧,我学程序也就想照猫画虎做些简单的,对自己工作学习有帮助就可以了,也没打算 ...

问题1:
老师您还是直接跟我说吧,我学程序也就想照猫画虎做些简单的,对自己工作学习有帮助就可以了,也没打算深学,要我像老师那样写程序,这辈子我是不指望了,

真的如此不自信吗?  
问题2:
您就简单跟我说说吧,呵呵,我真的很好奇,怎么就不行呢?

楼上我的回复换一句话说就是,你的想法很幼稚,很可爱。这里没有讥笑你的意思,是你对问题、对Excel了解不全面。要替换的单词如果个数相同,肯定可以像贴膏药一样,哪里酸痛贴哪里,但是,你也一再强调,单词个数有可能多、有可能少,这种情况下用你的思路就不行了。你也许在想,如果多了,在本节末尾插入单元格就可以,如果少了,把多余单元格删除就行,总之,没有更新的表不要动它,但是,插入或删除一个单元格,你知道Excel是怎么实现的?无论插入还是删除,每一列单元格个数都不会改变,不信你可以去数一数,所谓插入与删除,其实是改变了数据所在位置,实质上它还是把每个单元格重写一遍。 总结一句话,你的想法在某种情况下行,在多数情况下不行,不知明白了没有?

问题3:
而且我也好奇,除了老师为什么那么多高手都不愿意写这个代码,是难还是别的原因?我之前也发过类似的求助贴,他们都挺踊跃挺热心的,

首先肯定,不是难,这个问题不太难。其实,我也不是他们肚子里的蛔虫,不可能完全知道为什么,对不对?以我的猜想,还是前面说过的,是沟通问题,在论坛,这种现象很普遍,求助的人自认为把问题说明白了,但听的人如云里雾里,听不明白的原因很多,如行业特殊性、描述风格、语言能力等等。你也知道,能解决的问题,“他们都挺踊跃热心的”,不能解决的,也只能放过,没有谁会承诺解决所有问题。一开始接触你这个问题,我也是听不明白,第二个附件的描述让我明白了你的意思,所以有了以后的答案。论坛中有能力的人不少,但遇到含糊的问题,不少人的选择是宁愿放过,也不愿意在帖子中一次又一次回复“听不明白”,你能否理解?








TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-5 09:15 | 显示全部楼层
山菊花 发表于 2014-9-5 08:27
问题1:

真的如此不自信吗?  

谢谢老师,明白了,在看您回复之前,我也想到了,确实如果这个变动的表单词数量与原来的不一样,那就要增加行或删除行,这样原来表的起始单词的行值就变了,更新起来就没那么简单了,现在听您一说增加行或删除行所有单词都要重写,那还不如自己组装好dc数组一次就全更新了呢,再次感谢老师指导

TA的精华主题

TA的得分主题

发表于 2014-9-5 10:11 | 显示全部楼层
是的,“还不如自己组装好dc数组一次就全更新了呢”,这样理解就对了。这样写程序的好处就是以不变应万变,无论哪种情况都能对付。它的缺点就是前面考虑的,做了好多无用功,但是不怕,现在电脑速度太快了,做再多无用功,都是瞬间的事,耗费的时间可以忽略不计。当然,提速也是编程必须考虑的问题,这是另一个话题了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-5 12:10 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
山菊花 发表于 2014-9-5 10:11
是的,“还不如自己组装好dc数组一次就全更新了呢”,这样理解就对了。这样写程序的好处就是以不变应万变, ...

我觉得老师最让我敬佩的是对于外行人提出的问题能够耐心解答,不像许多高手,觉得你问的问题太不专业,就冷嘲热讽或说一些似是而非的话,为什么不行让你自己去悟,或者干脆说:网上类似答案很多自己去找吧,就再不理你了。最后套用一句刚背的英语词组:Take off my hat to you ! 向老师脱帽致敬!

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-9-5 22:47 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 renahu 于 2014-9-6 19:17 编辑
山菊花 发表于 2014-9-5 10:11
是的,“还不如自己组装好dc数组一次就全更新了呢”,这样理解就对了。这样写程序的好处就是以不变应万变, ...

老师,发现一个问题,我把建立词库加到窗体上了,在建立词库时,如果只是几张表,因为时间很短所以显示正常,如果几十张表,建立词库大概需要一分多钟,这时窗体里显示一片空白(所有控件都看不见了),等词库建完,窗体也正常显示了。老师,如何让窗体不受代码运行影响呢,要是有个进度提示就更好了。


老师又发现一个问题,一旦某个表第一个单词的位置是空的,那么就会出现“下标越界”的提示
            For j = 2 To UBound(Arr) Step 2  
                For k = 1 To UBound(Arr, 2)  '从行的首到尾
                    If Arr(j, k) <> "" And Not d.exists(Arr(j, k)) Then
                       d(Arr(j, k)) = Arr(j + 1, k): s = s + 1: Brr(s, 1) = Arr(j, k): Brr(s, 2) = Arr(j + 1, k)
                    End If
                    If j = 2 And k = 1 Then Brr(s, 3) = Arr(1, 1)    这里因为 Arr(2, 1) 是空,所以是s=0,出现下标越界提示,看来这个“标题栏”必须加在一行一行数第一个单词的旁边,而不是简单的 j = 2 And k = 1,老师您再给想想办法。
                Next
            Next

第二个问题,我用笨方法,加了个lab标记,应该是解决了
            For j = 2 To UBound(Arr) Step 2  
                For k = 1 To UBound(Arr, 2)  
                    If Arr(j, k) <> "" And Not d.exists(Arr(j, k)) Then
                        d(Arr(j, k)) = Arr(j + 1, k): s = s + 1: Brr(s, 1) = Arr(j, k): Brr(s, 2) = Arr(j + 1, k)
                        If lab = False Then
                           Brr(s, 3) = Arr(1, 1)
                           lab = True
                        End If

                    End If
                    'If j = 2 And k = 1 Then Brr(s, 3) = Arr(1, 1)  
                Next
            Next
            lab = False
新建词库也用同样的方法

TA的精华主题

TA的得分主题

发表于 2014-9-6 15:31 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
太难了,见到高手了
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-20 14:32 , Processed in 0.044501 second(s), 6 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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