无效使用属性Excel VBA

时间:2018-10-25 05:54:27

标签: excel vba excel-vba

Sub test()
    Worksheets("Sheet1").Range("A1").Value = 20
End Sub

这个简单的代码在编译时会出错。 activesheet。工作正常。

我想知道导致错误的原因以及解决方法...

似乎无法识别工作表,工作簿等。

1 个答案:

答案 0 :(得分:6)

答案取决于您遇到的错误。可能有2个问题:

1。未指定工作簿

您有多个工作簿,并且Excel在错误的工作簿中查找了名为“ Sheet1”的工作表,那么您需要指定该工作簿。

Workbooks("my-workbook").Worksheets("Sheet1").Range("A1").Value = 20

或者如果它在工作簿中运行代码,则最好使用

ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = 20

请注意,您应该避免使用ActiveWorkbook不太可靠。

2。工作表名称错误

没有名为Sheet1的工作表。检查您的工作表名称。请注意,有多种方法可以指定工作表。

  • 按数字指定

    Worksheets(1).Range("A1")
    

    这将使用工作表在工作表下方的标签栏中的位置。请注意,这种方法不是很可靠,因为可以通过移动选项卡来轻松更改位置。

  • 按标签名称指定

    Worksheets("Sheet1").Range("A1")
    

    这可能是最常见的方法。工作表由其选项卡名称指定。这比按数字更可靠。

  • 通过VBA名称指定

    Sheet1.Range("A1")
    

    此处使用工作表的VBA名称。该名称只能在VB编辑器中更改,并且对用户不可见,并且与选项卡名称无关。使用此方法可以确保即使用户更改了工作表的选项卡名称,VBA代码仍然可以在所需的工作表上运行。

因此,如果选项卡名称为Sheet1,则其VBA名称可以为Sheet5,并且可以位于选项卡栏中的位置3
使用此示例...

Worksheets("Sheet1").Range("A1")
Sheet5.Range("A1")
Worksheets(3).Range("A1")

…都是3个通过不同的名称访问完全相同的工作表。因此最好在这里使用有意义的名称(不要使用数字),以免造成混淆。