ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] vba在sheet里写代码和在模块里写有什么区别啊

  [复制链接]

TA的精华主题

TA的得分主题

发表于 2015-3-6 00:18 | 显示全部楼层
OK。。应是这样理解

TA的精华主题

TA的得分主题

发表于 2015-3-6 12:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
yiyiyicz 发表于 2014-1-11 19:25
都不全面
这样的问题,最好看看好的教材
对于一个初学者,有被误导的危险

即使被误导也没什么大问题。

一、Sheet页代码、ThisWorkBook页代码、模块页代码
① 只在某Sheet中【专用的】工作表事件和相关过程代码和函数,就放在这个Sheet代码页里。
② 在所有Sheet中【通用的】工作表事件和相关代码代码和函数,就放在ThisWorkBook代码页里。
③ 操作WorkBook事件和相关过程代码和函数,放在ThisWorkBook代码页里。
④ 在任何地方都可以用的过程代码和函数,放在模块里。
需要在工作表中直接引用的自定义函数过程代码,必须放在模块里。

二、关于模块
⑥ 模块可以有很多个,每个模块都有名称,但模块不能重名(模块名称不能重复
模块名称和模块内的过程、函数名称应避免同名。(外部引用时会产生冲突)
⑧ 不同模块内可以使用相同名称的代码过程或函数。
    同一模块内也可以保留使用相同名称的代码过程或函数,但无法正确引用。
⑨ 过程或函数名称唯一时,可以在任何位置直接根据过程名称和函数名称调用,
    但不同模块中含有同名过程或函数时,引用需指定模块名称后才能正确引用同名的过程或函数。

…………
因此,精简一下,不容易犯错的方法是:
① Sheet代码页和ThisWorkBook代码页中,尽量只使用和事件触发相关的过程和函数代码。
② 原则上函数写在模块中。
③ 原则上尽量使用不同的过程和函数名称。

…………
有一个必须提醒的特殊点:
① Sheet中存放的代码,默认引用【这个Sheet】中的单元格区域而无需指明完整路径。(绝对Sheet引用)
② ThisWorkBook页和模块页中的代码,默认引用【当前活动Sheet】中的单元格区域而无需指明完整路径。(相对Sheet引用)

呵呵。



评分

3

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-3-6 21:53 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 yiyiyicz 于 2015-3-7 06:42 编辑
香川群子 发表于 2015-3-6 12:07
即使被误导也没什么大问题。

一、Sheet页代码、ThisWorkBook页代码、模块页代码


在excel中用VBA,这些没错。但是当excel+VBA不够用了,势必会用VB,或者C,那时做这样的理解可能会出错
比如,在用VB中的窗体时,还是机械的套用可能就会出错
个人认为,
1,要理解对象层次。这在很多地方都会受益。vb和vba在原理上,对象层次是一致的,但格式有不同
2,原来曾经讨论过的变量声明,其实变量声明在VB中很是有用。比如用全局变量,在vba中,一般直接在模块中声明就可以,但有些生硬和不方便。在VB中可以在ABS也就是模块中,用自定义数据类型等来定义全局变量。这样会带来不少方便。在excelVBA中一样能用,理解起来最好跳出books,sheets,range
3,在VB中不用API,不用自动化,也能实现继承(或者说是模拟继承),通过委托(回调函数)就可以实现。这种方法在excelVBA中照样也能用。但是用好则需要通盘理解对象层次的原理和面向对象概念,用好类模块。这样写出来的程序在整个VBproject中才能灵活实现比较复杂的功能
换句话说,当会用vba后,再学习VB,之后反过头来重新看vba,那么对excelVBA会有更深入的认识,有很多概念是相通的,但含义却更加丰富了

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2015-4-9 15:31 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2015-11-23 14:50 | 显示全部楼层
请帮我看看,这些代码写在Sheet1里没错,我把它放“模块1”里,提示找不到对象,424错误……怎么改呢?谢谢

Sub 删除组行()
    Dim nRow%, m%, Arr(), Brr()
    If Range("a1").Value Like "*表" Then Exit Sub
    Arr = Intersect(UsedRange, Range("a:g")).Value  '在模块1里提示找不到对象
    nRow = UBound(Arr)
    ReDim Brr(1 To nRow, 1 To 7)
    For i = 2 To nRow
        If Not Arr(i, 1) Like "*组" Then
            m = m + 1
            For j = 1 To 7
                Brr(m, j) = Arr(i, j)
            Next
        End If
    Next
    Range("a1:g" & nRow).Value = Brr
End Sub

TA的精华主题

TA的得分主题

发表于 2016-9-17 23:33 | 显示全部楼层
香川群子 发表于 2015-3-6 12:07
即使被误导也没什么大问题。

一、Sheet页代码、ThisWorkBook页代码、模块页代码

谢谢指导。

TA的精华主题

TA的得分主题

发表于 2018-1-6 00:08 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2018-8-24 08:26 | 显示全部楼层
香川群子 发表于 2015-3-6 12:07
即使被误导也没什么大问题。

一、Sheet页代码、ThisWorkBook页代码、模块页代码

谢谢了,终于弄明白了

TA的精华主题

TA的得分主题

发表于 2018-8-24 09:07 来自手机 | 显示全部楼层
必须认真学一遍,纠正以前随意和陋习

TA的精华主题

TA的得分主题

发表于 2018-11-6 15:17 | 显示全部楼层
香川群子 发表于 2015-3-6 12:07
即使被误导也没什么大问题。

一、Sheet页代码、ThisWorkBook页代码、模块页代码

学习了!!!!!!!非常感谢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

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

GMT+8, 2024-4-20 10:33 , Processed in 0.042771 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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