2016-11-21 188 views
-4

为什么这不起作用?运行时错误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) 
+2

该代码是如何被调用的?从Excel或其他应用程序?它是否来自加载项? (如果是从Excel,而不是从一个外接,那么这段代码应该工作) –

+0

我得到任何问题与你给的代码。 –

+0

A13的值是多少?这是一个错误吗? – Vityata

回答

9

运行时错误91表明ActiveSheet Is Nothing(因为ActiveSheet是唯一的推测对象在代码的几行您提供的,肯定只有对象于提高错误的行)。

几种情况,我能想到的可能有助于此:

  1. 代码正在从一个外接程序调用,Excel或其他应用程序,并且没有Excel工作簿打开。在这种情况下,没有ActiveWorkbook,也没有ActiveSheet
  2. 代码正在从其他应用程序(如Outlook, 访问,的Word,PowerPoint等)执行的,但你使用Excel内置 ActiveSheet这不会在其他应用程序存在。
  3. 您已将内置的ActiveSheetDim Activesheet As Worksheet连为一体,忽略将工作表对象分配给该变量,因此默认为Nothing

分辨率:

  1. 添加逻辑以检查工作簿对象的存在等
  2. 声明一个Worksheet对象变量和分配给它。
  3. 倾向于避免隐藏现有内置名称,确保分配给对象变量
+3

我的猜测是#2 - 但我们真的不应该猜测。 OP需要提供更多细节。 –

+0

好像他正在试图通过一个位置参考为一个字符串,这让我觉得这就是问题。 fornameCurr = Activesheet.Cells(rowCurr,1)<> Dim fornameCurr As String。奇怪他没有得到一个数据类型不匹配的错误? –

+0

@DougCoats我不遵循你所说的......'ActiveSheet.Cells(rowCurr,1)'从该单元格返回'.Value',它可以转换为字符串数据类型,除非它是一个错误反而会引起错配)。 –

相关问题