要学好VBA就得学会钻字眼,因为不同的字意思是不一样的,这不Excel_VBA中就要分表和工作表。 有人说我就不知道区别,也照样用得没问题啊? 也有人说,昨天用得好好的,怎么今天代码就报错了呢? 首先我们来看一张图: 右键表名字→插入,会弹出来一个插入对话框,图上划线的部分就是Excel中的表 可以看出系统给它们的类型也做了命名,分别是:工作表、图表、MsExcel4.0宏表(简称宏表)、MsExcel5.0对话框(简称对话框),这些统称为表,它们存在于Sheets集合中,可使用Sheets(表名称) 或者Sheets(表位置) 来表示它们(操作它们)。 Excel2010的VBA离线帮助中搜索 Sheets会有这样的一段解释: Sheets 对象 指定的或活动工作簿中所有工作表的集合。
说明 Sheets集合可以包含Chart或Worksheet对象。 如果希望返回所有类型的工作表,Sheets 集合就非常有用。如果仅需使用某一类型的工作表,请参阅该工作表类型的对象主题。
帮助中有提到Chart (图表) 或Worksheet(工作表) ,这两个表分别对应上图中的 图表和工作表,帮助中还说到了两个如果: 如果希望返回所有类型的工作表,Sheets 集合就非常有用。 如果仅需使用某一类型的工作表,请参阅该工作表类型的对象主题。
或许你还有点迷茫,那我们就再通俗的说一下吧。 也就是说我们的表包含以下的: 图表 有独立VBA代码Charts(Chart) 工作表 有独立的VBA代码Worksheet(Worksheet) 宏表及对话框这四类表,它们都可以用Sheets 集合来表示,这就是第一个如果(如果希望返回所有类型的工作表,Sheets 集合就非常有用。)
若要单独操作图表或工作表,则可以使用Charts或Worksheets来表示。这就是第二个如果(如果仅需使用某一类型的工作表,请参阅该工作表类型的对象主题。)
那我又如何知道我应该用什么呢,或者应该如何来区分和使用它们呢? 通常情况下,我们只会有一种表WorkSheets的存在,因此使用Sheets和使用Worksheets并没有任何影响, 我们可以使用Sheets.Count和Wrksheets.Count来比较一下数量是否一致,若两段代码数量一致,即使你混合使用运行出来也不会有错。 如下图中测试代码Test001,通过返回表的总数量来循环修改工作表的名字,三张工作表的名称都会被修改,运行以后完全没有问题。 运行结果如下: 当我们的文件中包含有其它类型的表存在的时候,再使用代码时就需要注意了! 完全一样的代码,多了一个其它类型的表在里面的时候,再运行代码就报错了。 PS:上图中有一个重点,工程资源管理器中所显示的表明显与工作表标签中所显示的表数量不一样。。。。。为什么会这样。。。。。。谁能告诉我?
而且我们可以看到3张工作表的名字都被成功修改了名字,点击调试可以看到代码停留位置是修改工作表名称的那一行。打开视图→本地窗口,能看到变量X的值为4,这就是因为Sheets.Count 和Worksheets.Count的数量不一致的时候,混合使用代码而发生的错误。 这也是初学者比较容易遇到的错误,很多初学者都是看别人这样用的,照抄直接使用从不去研究区别(冤枉啊,我是根本不知道如何去研究),就这样掉进了别人坑里。
因此我们在写代码的时候,少给自己留一点坑,多给别人挖一点坑,这样才能让别人掉坑里过一下冬,自己好先走一步回家过年。 会了么? |
|
来自: L罗乐 > 《VBA基础入门教程》