未设置对象变量或 With 块变量

引用的对象变量无效。 出现此错误的原因可能有多种:

  • 声明变量时未指定类型。 如果声明变量时未指定类型,则它将默认为 Object 类型。

    例如,使用 Dim x 声明的变量将为 Object; 类型;使用 Dim x As String 声明的变量将为 String 类型。

    提示

    Option Strict 语句不允许隐式键入,否则将得到 Object 类型。 如果省略类型,则会发生编译时错误。 请参阅 Option Strict 语句

  • 你正在尝试引用已设置为 Nothing 的对象。

  • 你正在尝试访问未正确声明的数组变量的元素。

    例如,如果尝试引用数组 products(3) = "Widget" 的元素,声明为 products() As String 的数组将触发错误。 该数组没有元素,将被视为对象。

  • 你正在 With...End With 块被初始化之前尝试访问该块中的访问代码。 With...End With 块必须通过执行 With 语句入口点初始化。

注意

在早期版本的 Visual Basic 或 VBA 中,向变量赋值而未使用 Set 关键字(x = "name",而不是 Set x = "name")也会触发该错误。 Set 关键字在 Visual Basic .Net 中不再有效。

更正此错误

  1. 通过将以下代码添加到文件开头将 Option Strict 设置为 On

    Option Strict On
    

    运行项目时,对于未指定类型的任何变量,其“错误列表”中将显示编译器错误。

  2. 如果不想启用 Option Strict,请搜索未指定类型的任何变量的代码(Dim x,而不是 Dim x As String),并将预期类型添加到声明中。

  3. 请确保未引用已设置为 Nothing 的对象变量。 在代码中搜索关键字 Nothing,并修改代码,以便该对象在被引用前不会设置为 Nothing

  4. 在访问任何数组变量之前,请确保已对它们进行维度设置。 可以在首次创建数组(Dim x(5) As String,而不是 Dim x() As String)时分配维度,或使用 ReDim 关键字在首次访问数组之前设置其维度。

  5. 请确保通过执行 With 语句入口点初始化 With 块。

另请参阅