Excel VBA“对象变量或未设置块变量”

Posted

技术标签:

【中文标题】Excel VBA“对象变量或未设置块变量”【英文标题】:Excel VBA "Object variable or With block variable not set " 【发布时间】:2017-04-06 08:45:22 【问题描述】:

我有以下代码:

Sub CheckDates()

bAlarm = False

i = 1
Do Until ActiveSheet.Cells(row_header, i).Value = ""
    If ActiveSheet.Cells(row_header, i).Value = searchText Then
        col = i
        Exit Do
    End If
i = i + 1
Loop

i = 1
Do Until ActiveSheet.Cells(row_header, i).Value = ""
    If ActiveSheet.Cells(row_header, i).Value = searchNameText Then
        col_name = i
        Exit Do
    End If
i = i + 1
Loop

If col = 0 Then
    MsgBox searchText & " basliklar arasinda bulunamadi"
    Exit Sub
Else
    N = ActiveSheet.Range("A" & Rows.Count).End(xlUp).Row
    For i = row_header + 1 To N
        If isInDateRange(ActiveSheet.Cells(i, col).Value) Then
            With UserForm1.ListBox1
                .AddItem
                .List(.ListCount - 1, 0) = ActiveSheet.Cells(i, col_name).Value
                .List(.ListCount - 1, 1) = ActiveSheet.Cells(i, col).Value
            End With
            bAlarm = True
        End If
    Next i
End If

If bAlarm = True Then
    UserForm1.Show
End If

我在Do Until ActiveSheet.Cells(row_header, i).Value = "" 的行上收到Object variable or With block variable not set (Error 91) 错误。当我调试时,我可以看到 hprlink.Range 确实有一个值。有什么想法我做错了吗?

【问题讨论】:

【参考方案1】:

除非您的问题中缺少代码,否则我认为问题确实出在:

Do Until ActiveSheet.Cells(row_header, i).Value = ""

据我所知,row_header 此时为空,因此可能会解析为:

Do Until ActiveSheet.Cells( 0, 1).Value = ""

没有第 0 行,所以你得到了你的错误。

在开始循环以定位字段之前,在 row_header(可能是 1 - 我看不到您的工作表?)中输入一个值。

此外,您可能需要查看WorksheetFunction.Match,因为它会执行与前两个循环相同的操作,只需一行。

最后,您可能应该停止在您的子程序中一直引用ActiveSheet,或者使用With 块或Set 开头的对象来引用。

【讨论】:

以上是关于Excel VBA“对象变量或未设置块变量”的主要内容,如果未能解决你的问题,请参考以下文章

EXCEL VBA - 对象变量或未设置块变量

有时在 Outlook VBA 中获取“对象变量或未设置块变量”

运行时错误“91”(对象变量或未设置块变量)

运行时错误“91”:对象变量或未设置块变量

循环播放页面时出错。返回对象变量或未设置块变量

解决 Excel VBA 文本文件导出中的运行时 91 错误