我使用userforms输入数据,在某一点将数据的一部分复制到工作簿中的一个工作表中。
我的代码然后需要使用工作表中的一个值来检查此值是否在另一个工作表上显示,如果是,它会将链接到该值的值复制到原始工作表,然后填充用户窗体以便进一步信息可以被捕获。
如果我激活on error resume next
一切正常,除了tab功能停止在userform上工作,如果我在没有on error resume next
的情况下运行它,我会得到运行时错误:
' 91'对象变量或未设置块变量。
我该如何解决这个问题?
Sub Find_7_day()
Dim vfind
Dim rng As Range
Sheets("Test Data").Select
Sheets("Test Data").Range("$E$3").Select
vfind = ActiveCell
'On Error Resume Next
Call Sheet
Set rng = Cells.Find(What:=vfind, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False).Activate
If ActiveCell = vfind Then
Call Old_7_day
Call Form_7_day_fill
Else
Sheets("Test Data").Select
End If
End Sub
答案 0 :(得分:1)
您无法同时声明和.Activate
变量range
:
Dim rng As Range
Set rng = Cells.Find(What:=vfind, After:=ActiveCell, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=True, SearchFormat:=False).Activate
建议,请避免使用.Select
和Activate
,此处说明How to Avoid the Select Method in VBA & Why
代码:
Sub Find_7_day()
Dim vfind As String
Dim rng As Range
vfind = Sheets("Test Data").Range("$E$3").Value
Call Sheet
Set rng = Cells.Find(What:=vfind, LookIn:=xlValues, _
LookAt:=xlWhole, SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=True, _
SearchFormat:=False)
If rng Is Nothing Then
MsgBox vfind & " " & "dont exist"
Exit Sub
End If
If rng.Value = vfind Then
Call Old_7_day
Call Form_7_day_fill
Else
Sheets("Test Data").Select
End If
Exit Sub
End Sub