分享

VBA简单入门17:工作表对象

 weima938 2018-06-15
1、Range("a1") = "小李飞刀" 代码如果放在模块中,Range前面不指定其父对象(工作表),那么该代码就是操作当前的活动工作表,使其A1单元格值为“小李飞刀”。

2、一般建议Range对象前面都写上其父对象,以免代码容易受活动工作表切换而导致得不到结果。

3、弄清楚工作表?

Worksheet和Sheet都可以用来表示工作表,不同的是Worksheet仅仅指工作表,但Sheet并不仅仅是工作表,还包括图表、宏表、对话框等。

要弄清楚Worksheet和Sheet的区别,可以选择一个工作表,鼠标右键--插入,如下图。

Sheet可以表示是大红色方框里面的任意对象,包含Worksheet;

Worksheet仅表示小红方框里的工作表;

所以,很多时候,都可以用Worksheet和Sheet来表示工作表。

VBA简单入门17:工作表对象

自然,Worksheets集合和Sheets集合所包含的对象也不一样。

Worksheets集合仅仅是工作表的集合,Sheets集合可以是工作表、图表等对象的“混合”。

当一个工作簿中,只有工作表的时候,Wokrsheets和Sheets并无区别。

当一个工作簿中,既有工作表又有图表的时候,Wokrsheets和Sheets就包含不同的内容。(注意Chart1图表)

VBA简单入门17:工作表对象


4、一般情况下,可以使用工作表的索引Index、名称(Name)、CodeName三种方法来表示(引用)工作表。

4.1、Worksheets(Index)引用工作表:工作表从左到右排列,索引(Index)是1、2、3、4......排号。如下图中显示一个工作簿中的a、b、c 3个工作表。

VBA简单入门17:工作表对象

For i = 1 To 3

Worksheets(i).Select

Worksheets(i).[a1] = i

Next

上面代码返回结果:Worksheets(1)表示工作表 a;Worksheets(2)表示工作表 b;Worksheets(3)表示工作表 c .

可以通过下面的Gif看得更清楚:

VBA简单入门17:工作表对象

将a、b、c三个工作表换个顺序,再运行上面的代码:

VBA简单入门17:工作表对象

VBA简单入门17:工作表对象

可以得出,索引只和工作表的位置有关,和工作表的名称无关。

Wokrsheets(1)表示工作表 c ;Wokrsheets(2)表示工作表 a;Wokrsheets(3)表示工作表 b .

用Index来引用工作表,不是一个稳妥的做法,因为很容易因为工作表位置的改变导致 Wokrsheets(1) 表示不同的工作表对象。

4.2、Worksheets(工作表名称)表示引用工作表,工作表名称是唯一的,不能重复。

在工程管理器中,可以看到每个工作表的名称a、b、c(括号内)。

VBA简单入门17:工作表对象

因为工作表的名称的唯一性,所以使用工作表名称引用工作表,是比较靠谱的,也是较常用的做法,除非工作表名称改变或者删除工作表,否则便不会出错。

直接的引用工作表

Worksheets("a").Range("a1") = "小李飞刀" 工作表 a 的单元格赋值为“小李飞刀”

通过变量引用工作表

Dim xname As Stringxname = "b"Worksheets(xname).Range("a1") = "小李飞刀"
VBA简单入门17:工作表对象


4.3 通过CodeName引用工作表。

VBA简单入门17:工作表对象

红色方框中的名称就是工作表的CodeName,它是工作表自新建起就带有的、固定不变的。

类似我们的身份证,姓名可以改,但身份证号码不能变。

所以CodeName比工作表名称更靠谱,套用一句名言:化成灰都认得你。

 Sheet1.[a1] = "小李飞刀" Sheets("a").[a1] = "小李飞刀" Sheets(1).[a1] = "小李飞刀"

上面三句代码返回相同结果:(注意工作表从左到右的顺序a/b/c)

VBA简单入门17:工作表对象

将工作表 a 的位置拖到最右边,名称改为 d,再运行上面的代码:

VBA简单入门17:工作表对象

Sheet1.[a1] = "小李飞刀" 操作的仍然是 当初的 工作表a ,即使工作表名称从a改为d,但因为使用

CodeName引用工作表,所以无论是工作表名称a还是d,都是引用同一个工作表,CodeName是不变的

注意上图中的工程管理器中的 Sheet1(d),Sheet1就是CodeName。

Sheets("a").[a1] = "小李飞刀" 因工作表a的名称改为d,故发生错误。

Sheets(1).[a1] = "小李飞刀" 因工作表a(d)拖到最右边,所以Sheets(1)表示的是工作表 b 。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多