使用属性Excel VBA无效

-1 excel vba excel-vba

Sub test()
    Worksheets("Sheet1").Range("A1").Value = 20
End Sub
Run Code Online (Sandbox Code Playgroud)

这个简单的代码在编译时会出错. activesheet.工作良好.

我想知道什么导致错误以及如何修复它...

看起来它没有识别床单,工作簿等.

Pᴇʜ*_*Pᴇʜ 6

答案取决于你得到的错误.可能有两个问题:

1.未指定工作簿

您有多个工作簿,Excel正在查找名为"Sheet1"的工作表的错误工作簿,然后您需要指定工作簿.

Workbooks("my-workbook").Worksheets("Sheet1").Range("A1").Value = 20
Run Code Online (Sandbox Code Playgroud)

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

ThisWorkbook.Worksheets("Sheet1").Range("A1").Value = 20
Run Code Online (Sandbox Code Playgroud)

请注意,您应该避免ActiveWorkbook哪个不太可靠.

2.错误的工作表名称

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

  • 按编号指定

    Worksheets(1).Range("A1")
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 按选项卡名称指定

    Worksheets("Sheet1").Range("A1")
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 按VBA名称指定

    Sheet1.Range("A1")
    
    Run Code Online (Sandbox Code Playgroud)

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

因此,如果选项卡名称是Sheet1其VBA名称Sheet5,则它可以3位于选项卡栏中.
使用这个例子......

Worksheets("Sheet1").Range("A1")
Sheet5.Range("A1")
Worksheets(3).Range("A1")
Run Code Online (Sandbox Code Playgroud)

...只是通过不同的名称访问完全相同的工作表.所以最好在这里使用有意义的名字(而不是数字),以免混淆.