如何将vba应用于所有工作表,无论它是否处于活动状态

时间:2018-03-29 04:04:50

标签: excel vba excel-vba

我正在尝试将VBA应用于具有多个工作表的工作簿,其中sheetnames是可变的但是失败。

我的代码仅适用于有效工作表。

请帮我看看有什么问题?

Sub sample_code()
    Dim ws As Worksheet

    For Each ws In ThisWorkbook.Worksheets
        With ws
           Range("A1").Value = "test each worksheet"
        End With
    Next ws
End Sub

2 个答案:

答案 0 :(得分:3)

很抱歉,目前无法对此进行测试,但是可以进行以下操作吗?

Sub sample_code()
    Dim ws As Worksheet
    For Each ws In ThisWorkbook.Worksheets
        With ws
            .Range("A1") = "test each worksheet"
            ' (.Range("A1").Value is okay too)
        End With
    Next ws
End Sub

答案 1 :(得分:3)

您应完全符合Cell A1范围 - 例如 .Range("A1")

Intro to VBA: The Excel Object Hierarchy ( Jon Acampora )

Look into VBA objects which are organized in a hierarchy so it makes them easier to reference an object

enter image description here

在顶部是Excel应用程序。 Excel中的所有对象都是Application对象的成员或子成员。

enter image description here

每个单词之间的点允许我们从上到下引用层次结构的成员

  

记住VBA允许我们在引用对象时做出假设。如果未在一行代码中指定工作簿或工作表,则VBA假定您指的是活动工作簿和活动工作表。

     

例如,以下代码行将清除活动工作表上所有单元格的值和公式。

Cells.ClearContents

如果您没有告诉VBA哪个工作簿要清除哪个工作簿,那么这可能会造成灾难!您无法撤消该操作。

所以你想要对这行代码进行限定,告诉VBA你指的是哪个工作簿和工作表。

Workbooks("Book1.xlsx").Worksheets("Sheet1").Cells.ClearContents