【问题标题】:VBA Object variable or With block variable not set errorVBA 对象变量或未设置块变量错误
【发布时间】:2016-03-15 17:23:11
【问题描述】:

我在 Excel 上遇到 VBA 错误时遇到了困难,有人可以帮我理解这个错误的含义吗?

“VBA Object variable or With block variable not set error”

我的函数应该检查一个工作表是否存在,如果不创建新工作表,重命名它并返回主函数。 代码有效,但总是抛出错误..

Function GetWorksheetFromName(Name As String) As Worksheet
    Dim WS As Worksheet
    For Each WS In ThisWorkbook.Worksheets
        If StrComp(WS.Name, Name, vbTextCompare) = 0 Then
            Set GetWorksheetFromName = WS
            Exit Function
        End If
    Next WS

    With ThisWorkbook
        Set WS = Worksheets.Add(After:=Sheets(.Sheets.Count))
        WS.Name = Name
    End With

    Set GetWorksheetFromName = WS

End Function

P.S.: this 可能会有所帮助,但我仍然没有修复我的代码

【问题讨论】:

  • 什么不起作用?为我工作 With GetWorksheetFromName("ABC") : .Range("A1") = 123 : End With 。第一遍它创建新的工作表,第二遍它使用相同的工作表。
  • 代码有效,但抛出了这个错误
  • 你怎么称呼它?
  • 哪一行报错?
  • 我刚刚回答了这个问题,我真的不知道我是否应该留下这个问题,但至少 MSDN 链接可以有用:/

标签: excel vba exception


【解决方案1】:
Set WS = .Worksheets.Add(After:=.Sheets(.Sheets.Count)) 

请注意在 SheetsWorksheets 之前添加的句点 - 您当前的代码针对的是活动工作簿的工作表集合,而不是 ThisWorkbook。

【讨论】:

  • 还是一样...即使我评论底部我仍然得到错误
  • 我已经找到了问题,感谢您的宝贵时间我在收到函数结果时实际上错过了一个Set 语句......我仍在学习如何处理这个基本错误没有行号:|
【解决方案2】:

错误实际上是在MSDN link上列出的

您试图使用已设置为 Nothing 的对象变量

Set MyObject = Nothing             ' 释放对象。

MyCount = MyObject.Count       ' 引用已释放的对象。

重新指定对象变量的引用。例如,使用新的 Set 语句来设置对对象的新引用。

Dim WS As Worksheet

Sheets("Config").Select
WS = GetWorksheetFromName(Range("B8").Value)

我的错误在最后一行,我错过了 SET

Set WS = GetWorksheetFromName(Range("B8").Value)

感谢 Tim Williams 和 Scott Craner 的快速帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多