VBA:限定动态范围的工作表

时间:2018-05-12 10:26:42

标签: excel vba excel-vba

我刚刚开始使用VBA。

我有一个包含许多编号表(1,2,3,4等)的工作簿。

我现在已经阅读了符合以下条件的资格工作表:

Dim 1 As Worksheet: Set 1 = ThisWorkbook.Worksheets("1")

然后将其称为:

1.Range("B15").Value

比激活它更快(正如我所做的那样),例如。

Worksheets(1).Activate

我想通过循环动态访问我的工作表,如:

Worksheets(i).Activate

可以使用Qualifying方法吗?我被卡住了。

3 个答案:

答案 0 :(得分:0)

我不会使用数字作为变量名。您可以通过两种方式遍历工作表集合 - 第一种方法更有效率我相信,但怀疑您会注意到差异。

正如您所说,很少需要实际激活工作表。

Sub x()

Dim ws As Worksheet, i As Long

'option 1
For Each ws In ActiveWorkbook.Worksheets
    ws.Activate
    ws.Range("A1") = 1 'no need to activate first
Next ws

'option 2
For i = 1 To ActiveWorkbook.Worksheets.Count
    Worksheets(i).Activate
Next i

End Sub

答案 1 :(得分:0)

工作表有一个索引,它是它们当前在工作簿中的顺序。所以最左边的工作表是Worksheet(1)。这不一定与例如工作表(" Sheet1")或工作表(" 1")。

说我有床单" 2" ," 1"," 3",按工作簿中的顺序:

  1. 表2 A1有"第一张名为" 2" "
  2. Sheet 1 A1有"第二张名为" 1" "
  3. 表3 A1有"第三张名为" 3" "
  4. 然后运行以下命令:

    bit

    你得到:

    Output

    注意:您还可以在工作表集合上Option Explicit Public Sub test() Dim arr(), i As Long arr = Array("1", "2", "3") '<== Sheet names Debug.Print "Looping by name: " For i = LBound(arr) To UBound(arr) '<== Looping by name Debug.Print ThisWorkbook.Worksheets(arr(i)).Range("A1").Value Next i Debug.Print String(40, Chr$(61)) Debug.Print vbNewLine Debug.Print "Looping by sheet index: " For i = 1 To ThisWorkbook.Worksheets.Count '<== Looping by index (order from left to right) Debug.Print ThisWorkbook.Worksheets(i).Range("A1").Value Next i End Sub 循环,其顺序与跳过任何图表工作表对象的索引相同。

答案 2 :(得分:0)

一切都很简单:

1)当您传递字符串(例如,&#34; 1&#34;)时,您指的是工作表的名称

2)当你传递号码(比如1)时,你指的是表格中的位置&#39;集合。

重要的是要了解什么是表&#39;集合

有几种类型的工作表:工作表,图表工作表,对话框工作表(还有两种类型的宏工作表;您可以通过right-click sheet's tab -> Insert查看所有五种工作表)。因此,了解使用哪个集合非常重要。

说,你有四张纸(从左到右):

  1. 对话框表(名称&#34;对话框1&#34;)
  2. 工作表(姓名&#34; sheet1&#34;)
  3. 图表表(名称&#34; chart1&#34;)
  4. 工作表(姓名&#34; sheet2&#34;)
  5. 因此,可以通过Sheets集合枚举所有工作表。因此:

    1. Sheets(1)返回&#34; dialog1&#34;对话表
    2. Sheets(2)返回&#34; sheet1&#34;工作表
    3. Sheets(3)返回&#34; chart1&#34;图表
    4. Sheets(4)返回&#34; sheet2&#34;工作表
    5. 如果您只需要收集图表,请使用Charts集合。在我们的例子中,图表(1)将返回&#34; chart1&#34;图表。

      如果您只需要收集工作表,请使用Worksheets集合。在我们的案例中,Worksheets(2)将返回&#34; sheet2&#34;工作表。

      对话框表也是如此 - 使用DialogSheets集合(虽然它在IntelliSense中不可见,但您可以看到它:F2 -> Right-click -> Show Hidden Members)。

      最后但并非最不重要的是,每张工作表都有Index属性。但要小心它,因为它返回Sheets集合中索引的值。这意味着在我们的情况下Worksheets(2).Index将返回4。