VBA运行时错误91:对象变量未设置?
为什么这不起作用?运行时错误91?VBA运行时错误91:对象变量未设置?
Dim fornameCurr As String
Dim surnameCurr As String
Dim rowCurr As Long
rowCurr = 13
fornameCurr = Activesheet.Cells(rowCurr, 1) << ERROR HERE
surnameCurr = Activesheet.Cells(rowCurr, 2)
运行时错误91表明ActiveSheet Is Nothing
(因为ActiveSheet
是唯一的推测对象在代码的几行您提供的,肯定只有对象于提高错误的行)。
几种情况,我能想到的可能有助于此:
- 代码正在从一个外接程序调用,Excel或其他应用程序,并且没有Excel工作簿打开。在这种情况下,没有
ActiveWorkbook
,也没有ActiveSheet
。 - 代码正在从其他应用程序(如Outlook, 访问,的Word,PowerPoint等)执行的,但你使用Excel内置
ActiveSheet
这不会在其他应用程序存在。 - 您已将内置的
ActiveSheet
与Dim Activesheet As Worksheet
连为一体,忽略将工作表对象分配给该变量,因此默认为Nothing
。
分辨率:
- 添加逻辑以检查工作簿对象的存在等
- 声明一个
Worksheet
对象变量和分配给它。 - 倾向于避免隐藏现有内置名称,确保分配给对象变量
我的猜测是#2 - 但我们真的不应该猜测。 OP需要提供更多细节。 –
好像他正在试图通过一个位置参考为一个字符串,这让我觉得这就是问题。 fornameCurr = Activesheet.Cells(rowCurr,1) Dim fornameCurr As String。奇怪他没有得到一个数据类型不匹配的错误? –
@DougCoats我不遵循你所说的......'ActiveSheet.Cells(rowCurr,1)'从该单元格返回'.Value',它可以转换为字符串数据类型,除非它是一个错误反而会引起错配)。 –
该代码是如何被调用的?从Excel或其他应用程序?它是否来自加载项? (如果是从Excel,而不是从一个外接,那么这段代码应该工作) –
我得到任何问题与你给的代码。 –
A13的值是多少?这是一个错误吗? – Vityata