Excel 2016-VBA-设置对象错误91

Excel 2016-VBA-设置对象错误91,excel,vba,set,Excel,Vba,Set,下面的代码已插入“ThisWorkbook”Microsoft Excel对象。为什么工作簿的“打开”子结尾“我的集合对象”被更改为“无” 'Declare WorkBook variables Public wbI As Workbook, wbO As Workbook Public wsData As Worksheet, wsMain As Worksheet, wsPForma As Worksheet Public Sub Workbook_Open() Applicat

下面的代码已插入“ThisWorkbook”Microsoft Excel对象。为什么工作簿的“打开”子结尾“我的集合对象”被更改为“无”

'Declare WorkBook variables
Public wbI As Workbook, wbO As Workbook
Public wsData As Worksheet, wsMain As Worksheet, wsPForma As Worksheet

Public Sub Workbook_Open()

    Application.Wait (10) 'Wait 0.1 seconds

    Set wbI = ThisWorkbook
    Set wsData = wbI.Sheets("Customs Details Sheet Data")
    Set wsMain = wbI.Sheets("Customs Details Sheet")
    Set wsPForma = wbI.Sheets("Manufacturer Pro-Forma")

End Sub

如果要检查变量是否已正确设置,可以使用
VarType
函数对其进行测试

它将返回一个值,该值指示基于此变量的变量类型

在您的情况下,您可以键入:

    MsgBox(VarType(wsData))
如果你的工作表设置正确,你会得到一个9,它代表一个对象,这个对象就是你的工作表

如果您试图使用数据表上的
dVBnum=wsData.Cells(1,5)'VB Number单元格位置来获取单元格位置,那么您的操作是错误的

要获取单元格地址,有两个选项:

  • 获取单元格的address属性

    dVBnum = wsData.Cells(1, 5).Address
    
  • 对于
    dVBnum

  • 获取包含行和列的位置

    dVBnum = wsData.Range("E1").row & ", " & Range("E1").Column
    

  • 对于
    dVBnum

    dVBnum
    是一个
    范围,您将得到
    “1,1”
    。您从未初始化它,因此它是

    线路

    “将
    dVBnum
    设置为等于
    wsData.Cells(1,5)
    .Value

    因为
    dVBnum
    Nothing
    ,所以它没有

    如果要将对范围
    wsData.Cells(1,5)
    本身的引用存储在变量中,则

    如果要将存储在单元格中的值存储到变量中,则不应将变量声明为
    范围

    Dim dVBnum As Variant
    dVBnum = wsData.Cells(1, 5)
    

    你想达到什么目标?您希望将什么类型的数据绑定到
    dVBnum
    变量?单元格内容或其位置?尝试添加一些“Msgbox Not wsData Is Nothing”以检查wsData是否已正确设置此代码可能给出错误91的唯一方法是当
    dVBnum
    是一个对象类型变量且
    Nothing
    时。所有其他原因都会导致不同的错误。@GSerg不完全是这样。如果
    wsData
    dVBnum
    行之前设置为
    Nothing
    ,它也将以错误91结束。什么类型的变量是
    dVBnum
    ?可以。稍后我将使用dVBnum.Value获取该单元格的值,并将其分配给另一个变量。确定。我的计划是使用dVBnum作为范围的参考,但我认为是代码中的“wsData”部分导致了我的问题。如上所述,我已经在我的dVBnum前面添加了“Set”一词,现在它正在工作。谢谢,我在后面引用DVB的代码中的另一个子代码中遇到了相同的错误,现在添加它。“工作簿\打开”子项后,“我的集合”似乎变为“无”ends@Chris如果您的变量是局部变量,如何使它们成为全局变量而不是局部变量?我曾尝试将delcarations放入一个模块,并尝试将SET命令放入和移出该模块,但都没有成功
    Set dVBnum = wsData.Cells(1, 5)
    
    Dim dVBnum As Variant
    dVBnum = wsData.Cells(1, 5)