Sub test()
Worksheets("Sheet1").Range("A1").Value = 20
End Sub
这个简单的代码在编译时会出错。
activesheet
。工作正常。
我想知道导致错误的原因以及解决方法...
似乎无法识别工作表,工作簿等。
答案 0 :(得分:6)
答案取决于您遇到的错误。可能有2个问题:
您有多个工作簿,并且Excel在错误的工作簿中查找了名为“ Sheet1”的工作表,那么您需要指定该工作簿。
Workbooks("my-workbook").Worksheets("Sheet1").Range("A1").Value = 20
或者如果它在工作簿中运行代码,则最好使用
ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = 20
请注意,您应该避免使用ActiveWorkbook
不太可靠。
没有名为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个通过不同的名称访问完全相同的工作表。因此最好在这里使用有意义的名称(不要使用数字),以免造成混淆。