Excel 2016 不会让我将工作表分配给变量

Excel 2016 will not let me assign a worksheet to a variable

我是一名经验丰富的 C/C++/Java/C# 开发人员,在 Excel 2016 年第一次尝试 VBA,遇到了一个莫名其妙的问题具有以下完整宏的门:

Sub AddDataToSheet1()
10  Dim ws As Worksheet
20  ws = Worksheets(1)
30  ws.Activate
40  ws.Range("A1").Value = "Apple Pie"
End Sub

在第 20 行,它因错误而崩溃:

Runtime error '91'
Object variable or With block variable not set

嗯...我正在尝试设置它?这是在 Windows 10 Pro 上全新安装的 Office 365 中创建的第一个工作簿。该工作簿中有两个工作表,顺序为 "Main Sheet""Aux Sheet 1"

如果我将第 20 行更改为:

20  ws = Sheets(1)

出现同样的错误。如果我尝试使用 Worksheets 或 Sheets 按工作表名称编制索引,也会发生这种情况,例如

20  ws = Sheets("Main Sheet")

即使使用应用程序进行排位也会导致相同的错误:

20  ws = Application.Workheets("Main Sheet")

Intellisense 似乎认为 Sheets、Worksheets、Application.Sheets 和 Application.Worksheets 都是有效对象,_Default(index) 作为可用操作。

知道这里会发生什么吗?

您设置对象但为变量赋值。你需要 SET ws = Worksheets(1) .

Sub AddDataToSheet1()
    Dim ws As Worksheet, str as string
    Set ws = Worksheets(1)
    ws.Activate
    ws.Range("A1").Value = "Apple Pie"
    str = ws.Range("A1").Value
    debug.print str
End Sub