Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 5060|回复: 6

[已解决]把代码放到模块里和放到工作表里的不同

[复制链接]
发表于 2010-12-2 19:39 | 显示全部楼层 |阅读模式

本来以为一样的,放到工作表里就出错了。[em04]

把代码放到模块里和放到工作表里的不同

把代码放到模块里和放到工作表里的不同

[此贴子已经被作者于2010-12-2 19:40:04编辑过]
最佳答案
2010-12-2 19:51

你的代码是在三个工作表中同时运行,代码单独放在一个工作表的话,只对当前的工作表运行返回结果,我的理解是这样的[em04]

Sheets(Array(1, 2, 3)).Select

excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2010-12-2 19:51 | 显示全部楼层    本楼为最佳答案   

你的代码是在三个工作表中同时运行,代码单独放在一个工作表的话,只对当前的工作表运行返回结果,我的理解是这样的[em04]

Sheets(Array(1, 2, 3)).Select

回复

使用道具 举报

发表于 2010-12-2 20:08 | 显示全部楼层

Sub aa()
    For i = 1 To Sheets.Count
        Sheets(i).Range("a1").Interior.ColorIndex = 3
    Next
End Sub

加个循环就可以了

回复

使用道具 举报

 楼主| 发表于 2010-12-2 20:33 | 显示全部楼层

最佳给帅了,我先这么理解[em01]
回复

使用道具 举报

发表于 2010-12-3 09:02 | 显示全部楼层

1.将代码放在第一个sheet中有效。也就是sheets(1)的VBE窗口下就可以运行。具体运行机制不详。我也奇了怪了呢!!!!
2.如果不将代码放在第一个sheet中,那么在代码中加入将放有代码的工作表激活,也可以运行。比如将如下代码放在sheet2模块里。
Sub hhg()
  Sheets.Select
  Sheet2.Activate
  [a1].Select
   Selection.Interior.Color = vbBlue
End Sub
综合以上两点:貌似对全体工作表统一进行操作时,要同时选取所有工作表的某个单元格,必须在代码所在工作表为activesheet的状态下有效。有意思!!
所以综合以上两点:如下代码便可以所有工作表通吃了:
Sub hhg()
  Sheets.Select
  Me.Activate
  [a1].Select
   Selection.Interior.Color = vbBlue
End Sub

但从一般规则上来讲,以下规则还是有效地:
如果省略sheets,直接使用Range("A1")="xx"这样的写法:
在标准模块中,Range("A1")表示当前活动工作表的A1单元格。
在某个sheet模块中,那么Range("A1")就只能表示该工作表的A1单元格了。
[此贴子已经被作者于2010-12-3 9:26:20编辑过]
回复

使用道具 举报

发表于 2010-12-3 09:28 | 显示全部楼层

unsamesky提示,发现确实如此。我又试了下:


'sheet2中
Sub b()
    Sheets(Array(2, 3, 1)).Select
    Range("a1").Select
    Selection.Interior.ColorIndex = 4
End Sub

'sheet3中
Sub c()
    Sheets(Array(3, 2, 1)).Select
    Range("a1").Select
    Selection.Interior.ColorIndex = 4
End Sub

是不是当系统读取数组的第一个数组元素所表示的对象时,因为读取的实际是本工作表的单元格,所以不出错。

至于接着再读后面的数组元素所表示的对象为什么不出错,理由就如同技巧操作:在当前工作表中,允许同时选取当前工作表和其它工作表。

回复

使用道具 举报

发表于 2010-12-3 09:53 | 显示全部楼层


'sheet2中
Sub b()

    '(依次)选取了3个工作表,所以sheet3是当前激活工作表。
    Sheets(Array(3, 2, 1)).Select

    MsgBox ActiveSheet.Name    '验证

    'me在此表示工作表,即sheet2
    Me.Activate    '将当前激活工作表设为sheet2
   
    '这样,后面代码就不会保错了
    Range("a1").Select
    Selection.Interior.ColorIndex = 4
   
End Sub

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-4-27 06:27 , Processed in 0.615226 second(s), 11 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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