学习VBA又被坑啦
excel吧
全部回复
仅看楼主
level 10
rt!单元格表示方法的区别,居然有个细节没人给我讲清楚,我说我测试程序怎么老出错呢?代码如下:
Sub test()
Dim c, k%, rng As Range
For Each rng In Sheets("总表").Range("a3:a" & Cells(Rows.Count, 1).End(xlUp).Row)
'For Each rng In Range(Sheets("总表").[a3], Sheets("总表").Cells(Rows.Count, 1).End(xlUp))
Set c = rng.Find("张三")
If Not c Is Nothing Then
Sheets("总表").[b3:d3].Offset(c.Row - 3).Copy Sheets("张三").[b5].Offset(k)
k = k + 1
End If
Next
End Sub
这样表达
Sheets("总表").Range("a3:a" & Cells(Rows.Count, 1).End(xlUp).Row)是对的,
Range是Sheets("总表")的从属对象。
这样表达
Range(Sheets("总表").[a3], Sheets("总表").Cells(Rows.Count, 1).End(xlUp)),才是对的。
如果这样表达
Sheets("总表").Range([a3], Cells(Rows.Count, 1).End(xlUp)),若当前工作表不是"总表“就是错的,
表明Range不是Sheets("总表")的从属对象。
2018年02月13日 05点02分 1
level 8
range不属于sheets(n)那sheets(n).range就无法编译,你觉得会吗?vbe中可以省略application并不代表对象不能属于子对象!
2018年02月13日 06点02分 2
level 10
假设我要清除第一张表的a1:a10区域,当前选择的工作表不是第一张工作表
实际测试结果:
sheets(1).range("a1:a10").clear正确
range(sheets(1).[a1],sheets(1).[a10]).clear也正确
sheets(1).range([a1],[a10]).clear错误
2018年02月13日 07点02分 4
原因很简单,你用子对象来引用全局对象,在模块中没有前缀的[a1]实际是activesheet.[a1]。activesheet是全局对象,只属于application和workbook,你能这么用么?worksheet.activesheet,这些内容帮助中写的非常明白!
2018年02月13日 07点02分
@已经为了忘记 2010以后版本没有帮助,你不知道么,链接的帮助翻译不准确
2018年02月13日 07点02分
@秦時明月漢時圓 这跟版本没关系,这是面向对象技术的体现,excel 2003也一样!另外2010的帮助也并非完全人工翻译!很多内容让你怀疑中文没学好!
2018年02月13日 07点02分
@已经为了忘记 只能说做教程的考虑不够周到,或者说不太深入,很多东西为什么不能那样去用,我也不知道该看什么
2018年02月13日 07点02分
level 10
从这里说明:
sheets(1).range("a1:a10")
A1:A10从属于sheets(1),a1:a10是sheet(1)的区域
range(sheets(1).[a1],sheets(1).[a10])
这里和上面是等效的,不同的是range是当前工作表的区域,除了选择目标区域,其他情况一律要默认为当前工作表,后面a1和a10必须在一工作表。
如果省略工作表名称,默认为当前工作表,否则就为指定名称的工作表。
2018年02月13日 07点02分 5
前面没写它爹名字的,都是activexxx的孩子. 活动窗口\工作簿\工作表\单元格. 你这个错误应该每个人都犯过. range(range1,range2) 因为range1,range2和range不在同一个工作表导致错误.
2018年02月13日 09点02分
你还是没有完全搞明白,range对象的缺省父对象有两种,工作表代码中是该工作表,模块中是活动工作表。还有,worksheet.sort方法中的range对象比较特别,你可以试试。
2018年02月14日 15点02分
@战争之王黄仁勋 worksheet没有sort方法,只有同名属性,返回sort对象,该对象有个rng属性可以返回range对象。没什么特别!
2018年02月15日 03点02分
@已经为了忘记 记错了,range的sort是方法特别的是worksheet.sort.setrange方法的rng,可以引用其他工作表的range,会自动变换为该工作表同地址的range。
2018年02月15日 10点02分
level 11
vba学这么深有什么用……解决问题就行了[捂嘴笑][捂嘴笑][捂嘴笑]
2018年02月14日 09点02分 6
理解了对象就意味着你可以在vba中捕获事件,构成自己的事件类,比如特定的range对象提供给鼠标掠过时单元格着色能力!
2018年02月15日 03点02分
回复 已经为了忘记 :比起着色 更在乎 准确性 和 效率 花里胡哨的都是空把式
2018年02月15日 03点02分
@08074000 你先去搞清事件捕获的意义吧!
2018年02月15日 04点02分
回复 已经为了忘记 :教历史的么[汗][汗][汗] 要不要写个中心思想
2018年02月15日 04点02分
level 4
真羡慕,懂vba的朋友。我这辈子是无法学会的了。
2018年02月15日 07点02分 7
1