1、Range("a1") = "小李飞刀" 代码如果放在模块中,Range前面不指定其父对象(工作表),那么该代码就是操作当前的活动工作表,使其A1单元格值为“小李飞刀”。 2、一般建议Range对象前面都写上其父对象,以免代码容易受活动工作表切换而导致得不到结果。 3、弄清楚工作表? Worksheet和Sheet都可以用来表示工作表,不同的是Worksheet仅仅指工作表,但Sheet并不仅仅是工作表,还包括图表、宏表、对话框等。 要弄清楚Worksheet和Sheet的区别,可以选择一个工作表,鼠标右键--插入,如下图。 Sheet可以表示是大红色方框里面的任意对象,包含Worksheet; Worksheet仅表示小红方框里的工作表; 所以,很多时候,都可以用Worksheet和Sheet来表示工作表。 自然,Worksheets集合和Sheets集合所包含的对象也不一样。 Worksheets集合仅仅是工作表的集合,Sheets集合可以是工作表、图表等对象的“混合”。 当一个工作簿中,只有工作表的时候,Wokrsheets和Sheets并无区别。 当一个工作簿中,既有工作表又有图表的时候,Wokrsheets和Sheets就包含不同的内容。(注意Chart1图表) 4、一般情况下,可以使用工作表的索引Index、名称(Name)、CodeName三种方法来表示(引用)工作表。 4.1、Worksheets(Index)引用工作表:工作表从左到右排列,索引(Index)是1、2、3、4......排号。如下图中显示一个工作簿中的a、b、c 3个工作表。
上面代码返回结果:Worksheets(1)表示工作表 a;Worksheets(2)表示工作表 b;Worksheets(3)表示工作表 c . 可以通过下面的Gif看得更清楚: 将a、b、c三个工作表换个顺序,再运行上面的代码: 可以得出,索引只和工作表的位置有关,和工作表的名称无关。 Wokrsheets(1)表示工作表 c ;Wokrsheets(2)表示工作表 a;Wokrsheets(3)表示工作表 b . 用Index来引用工作表,不是一个稳妥的做法,因为很容易因为工作表位置的改变导致 Wokrsheets(1) 表示不同的工作表对象。 4.2、Worksheets(工作表名称)表示引用工作表,工作表名称是唯一的,不能重复。 在工程管理器中,可以看到每个工作表的名称a、b、c(括号内)。 因为工作表的名称的唯一性,所以使用工作表名称引用工作表,是比较靠谱的,也是较常用的做法,除非工作表名称改变或者删除工作表,否则便不会出错。 直接的引用工作表 Worksheets("a").Range("a1") = "小李飞刀" 工作表 a 的单元格赋值为“小李飞刀” 通过变量引用工作表 Dim xname As Stringxname = "b"Worksheets(xname).Range("a1") = "小李飞刀" 4.3 通过CodeName引用工作表。 红色方框中的名称就是工作表的CodeName,它是工作表自新建起就带有的、固定不变的。 类似我们的身份证,姓名可以改,但身份证号码不能变。 所以CodeName比工作表名称更靠谱,套用一句名言:化成灰都认得你。 Sheet1.[a1] = "小李飞刀" Sheets("a").[a1] = "小李飞刀" Sheets(1).[a1] = "小李飞刀" 上面三句代码返回相同结果:(注意工作表从左到右的顺序a/b/c) 将工作表 a 的位置拖到最右边,名称改为 d,再运行上面的代码: 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 。 |
|