我是一位经验丰富的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)
发生同样的错误。如果我尝试使用工作表或表格(例如
)按工作表名称进行索引,也会发生这种情况20 ws = Sheets("Main Sheet")
即使使用应用程序进行限定也会导致相同的错误:
20 ws = Application.Workheets("Main Sheet")
Intellisense似乎认为Sheets,Worksheets,Application.Sheets和Application.Worksheets都是有效对象,_Default(index)作为可用操作。
知道这里可能会发生什么吗?
答案 0 :(得分:1)
您设置对象但为变量赋值。您需要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