ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[分享] 抛砖引玉,VBA编写的简单VBA程序解释器,期待您的进一步完善与改进(最新:进化5)

    [复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-3-28 10:33 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 lbl016 于 2010-3-28 10:26 发表
你仍然设有把代码给我解释清楚,我还是没有弄明白


我以为你是告诉我解释这些的时候有问题呢,当成你是在反馈意见了,我手工帮你解释下吧

If Target.Row > 3 And Target = Target.Offset(-1, 0) And Target <> "" And Target.Offset(0, 1) = "" Then  ‘如果target的行号大于3 并且 target上面的单元格的值相同 并且 target不为空 并且 target右边的单元格为空 则执行
     Range("b" & Target.Row - 1 & ":g" & Target.Row - 1).Copy Range("b" & Target.Row)  ’target所在行的上一行的B列到G列复制到target这行的B列到G列
     Range("h" & Target.Row) = Range("h" & Target.Row - 1) + 1  ‘target所在行的H列单元格的值等于target上一行单元格的值加1
     Range("l" & Target.Row - 1 & ":n" & Target.Row - 1).Copy Range("l" & Target.Row)  ’target所在行的上一行的I列到N列复制到target所在行的I列到N列
End If  ‘判断结束

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-3-28 10:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)    '当工作表发生改变时执行程序(固定格式)
    Dim i%, j%, n%    '定义变量 i%,j%,n%
If Target.Count > 1 Or Target.Column > 1 Then Exit Sub    '如果  Target的计数值>1或者 Target的列标>1 则执行 退出子程序
                    Application.Calculation = xlManual    ' 应用程序的重新计算=手动
                    ActiveSheet.Calculate                           ' 活动工作表的重新计算
Sheets("信息卡").Calculate    '<工作表>("信息卡" )的重新计算
                            Application.EnableEvents = False    ' 应用程序的激活事件响应=False
                    If Target.Row > 2 And Target <> "" And Target <> Target.Offset(-1, 0) Then    '如果  Target的行标>2 并且  Target 不等于 空值 并且  Target 不等于  Target的<偏移>(-1,0) 则执行
                        If [信息卡!i1] <> ActiveSheet.Name Then [信息卡!i1] = ActiveSheet.Name    '如果 [信息卡!i1] 不等于  活动工作表的名称 则执行 [信息卡!i1]= 活动工作表的名称
                        If [信息卡!h1] <> Target Then [信息卡!h1] = Target    '如果 [信息卡!h1] 不等于 Target 则执行 [信息卡!h1]=Target
                        Sheets("信息卡").[a8:a27,c8:c27,d8:d27,e8:e27,g8:g27,h8:h27,c3,c4,c5,e3,e4,e5,g3,g4] = ""    '<工作表>("信息卡" )的[a8:a27,c8:c27,d8:d27,e8:e27,g8:g27,h8:h27,c3,c4,c5,e3,e4,e5,g3,g4]=空值
                            i = Target.Row    'i= Target的行标
                        n = 0    'n=0
                        For j = i To i + 20    '设定变量范围为j=i到i+20
                            If Range("a" & j) = Target Then    '如果 <单元格>区域("a" & j)= Target 则执行
                                n = n + 1    'n=n+1
                                With Sheets("信息卡")    '工作于<工作表>("信息卡")
                                  .Range("c" & 3) = Range("c" & j)    '<With对象>的<单元格>区域("c" & 3)=<单元格>区域("c" & j)
                                  .Range("c" & 4) = Range("b" & j)    '<With对象>的<单元格>区域("c" & 4)=<单元格>区域("b" & j)
                                  .Range("e" & 3) = Range("d" & j)    '<With对象>的<单元格>区域("e" & 3)=<单元格>区域("d" & j)
                                  .Range("e" & 4) = Range("h" & j)    '<With对象>的<单元格>区域("e" & 4)=<单元格>区域("h" & j)
                                  .Range("e" & 5) = Range("j" & j)    '<With对象>的<单元格>区域("e" & 5)=<单元格>区域("j" & j)
                                  .Range("g" & 3) = Range("f" & j)    '<With对象>的<单元格>区域("g" & 3)=<单元格>区域("f" & j)
                                  .Range("g" & 4) = Range("g" & j)    '<With对象>的<单元格>区域("g" & 4)=<单元格>区域("g" & j)
                                  .Range("a" & 7 + n) = Year(Range("j" & j))    '<With对象>的<单元格>区域("a" & 7 + n)=Year(<单元格>区域("j" & j))
                                  .Range("e" & 7 + n) = Range("k" & j)    '<With对象>的<单元格>区域("e" & 7 + n)=<单元格>区域("k" & j)
                                  .Range("g" & 7 + n) = Range("l" & j)    '<With对象>的<单元格>区域("g" & 7 + n)=<单元格>区域("l" & j)
                                  .Range("h" & 7 + n) = (.Range("e" & 7 + n)) + (.Range("g" & 7 + n))    '<With对象>的<单元格>区域("h" & 7 + n)=(<With对象>的<单元格>区域("e" & 7 + n))+(<With对象>的<单元格>区域("g" & 7 + n))
                                  .Range("d" & 7 + n) = 12    '<With对象>的<单元格>区域("d" & 7 + n)=12
                                End With    'With语句结束
                                     End If    'If判断过程结束
                        Next                          '下一个
                                       End If    'If判断过程结束
                    If Target.Row > 3 And Target = Target.Offset(-1, 0) And Target <> "" And Target.Offset(0, 1) = "" Then    '如果  Target的行标>3 并且  Target= Target的<偏移>(-1,0) 并且  Target 不等于 空值 并且  Target的<偏移>(0,1)=空值 则执行
                        Range("b" & Target.Row - 1 & ":g" & Target.Row - 1).Copy Range("b" & Target.Row)    '<单元格>区域("b" & Target.Row - 1 & ":g" &  Target的行标-1 )的复制<单元格>区域("b" & Target.Row)
                        Range("h" & Target.Row) = Range("h" & Target.Row - 1) + 1    '<单元格>区域("h" & Target.Row)=<单元格>区域("h" & Target.Row - 1)+1
                        Range("l" & Target.Row - 1 & ":n" & Target.Row - 1).Copy Range("l" & Target.Row)    '<单元格>区域("l" & Target.Row - 1 & ":n" &  Target的行标-1 )的复制<单元格>区域("l" & Target.Row)
                    End If    'If判断过程结束
                    Application.EnableEvents = True    ' 应用程序的激活事件响应=True
                    Application.Calculation = xlAutomatic        ' 应用程序的重新计算=xlAutomatic
                End If    'If判断过程结束
            End If    'If判断过程结束
End Sub     '子程序结束
    '

TA的精华主题

TA的得分主题

发表于 2010-3-28 10:53 | 显示全部楼层
原帖由 kevinchengcw 于 2010-3-28 10:33 发表


我以为你是告诉我解释这些的时候有问题呢,当成你是在反馈意见了,我手工帮你解释下吧

If Target.Row > 3 And Target = Target.Offset(-1, 0) And Target  "" And Target.Offset(0, 1) = "" Then  ‘如果targ ...

我就想达到你这样的解释

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-3-28 10:56 | 显示全部楼层
这个,我现在还没这个能力,毕竟目前为止还没有任何一款翻译软件能达到人工的效果

TA的精华主题

TA的得分主题

发表于 2010-3-28 11:00 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
原帖由 kevinchengcw 于 2010-3-28 10:56 发表
这个,我现在还没这个能力,毕竟目前为止还没有任何一款翻译软件能达到人工的效果

因为这样的效果对初学者才能达到最好

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-3-28 11:03 | 显示全部楼层
原帖由 lbl016 于 2010-3-28 11:00 发表

因为这样的效果对初学者才能达到最好


对于翻译成这样您能提供一个好的方法或建议吗,或者能找到这样的软件的翻译流程之类的,我暂时还想不到有更好的方式,麻烦帮忙改进一下

TA的精华主题

TA的得分主题

发表于 2010-3-28 11:10 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
不好意思,我也没有办法,不过我通过你的手工解释已把刚才的代码全部搞清楚了

TA的精华主题

TA的得分主题

发表于 2010-3-28 12:57 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
感谢分享,真不错

TA的精华主题

TA的得分主题

发表于 2010-3-28 14:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
谢谢分享,好好学习

TA的精华主题

TA的得分主题

发表于 2010-3-28 15:51 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-26 21:33 , Processed in 0.043929 second(s), 5 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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