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“对象变量或未设置块变量”的主要内容,如果未能解决你的问题,请参考以下文章