使用VBA从Access中搜索工作簿中的所有Excel工作表
下面的代码从Access窗体上的按钮事件打开Excel电子表格,并在命名工作表的窗体控件中搜索字符串。我想修改此代码以搜索所有工作表。excel工作簿是从表单控件中提取的变量使用VBA从Access中搜索工作簿中的所有Excel工作表,excel,vba,ms-access,Excel,Vba,Ms Access,下面的代码从Access窗体上的按钮事件打开Excel电子表格,并在命名工作表的窗体控件中搜索字符串。我想修改此代码以搜索所有工作表。excel工作簿是从表单控件中提取的变量 ``` Private Sub Command132_Click() On Error GoTo Err_Command132_Click Dim filename As String Dim searchstring As String Dim xlApp As Excel.Application 'Excel o
```
Private Sub Command132_Click()
On Error GoTo Err_Command132_Click
Dim filename As String
Dim searchstring As String
Dim xlApp As Excel.Application 'Excel object
Dim XlBook As Excel.Workbook 'Workbook object
Dim Xlsheet As Excel.Worksheet 'Worksheet object
Set xlApp = CreateObject("Excel.Application")
searchstring = Me.Matrixsrch
filename = Me.GroupsMatrixLoccntrl
Set XlBook = xlApp.Workbooks.Open(filename)
xlApp.Visible = True
xlApp.ActiveWindow.WindowState = xlMaximized
Set Xlsheet = XlBook.Sheets("GroupMatrix")
With Xlsheet
.Cells.Find(What:=searchstring, After:=.Cells(1, 1), LookIn:=xlvalues, LookAt:=xlPart,
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
End With
Exit_Command132_Click:
Exit Sub
Err_Command132_Click:
MsgBox "Error " & Err.Number & "; " & Err.Description
Debug.Print "Error " & Err.Number & "; " & Err.Description
Resume Exit_Command132_Click
End Sub
您需要测试查找是否成功 如果是,则退出循环(假设要在找到
搜索字符串
后停止;如果不是这样,请删除退出
)
您需要测试查找是否成功。谢谢。是,如果第一页上存在匹配值,则会找到匹配值,然后抛出错误。我标记了
Exit for
,并将SearchFormat:=False)
编辑为`SearchFormat:=False)\激活`如果值出现在第一页,搜索会找到并选择相关单元格和错误424;显示所需对象
错误。如果该值在第1页上不存在(并且在第2页上存在),则搜索停止,并出现错误91;对象变量或未设置块变量时显示不激活
-您不需要。如我的评论所述,如果您真的愿意,您应该使用foundCell
。如果您按当前操作链接.Activate
,如果查找失败,您将得到一个错误,这正是您当前的问题。抱歉,速度太慢,但是如果我不激活,我如何知道搜索是否已运行?请使用FoundCell
-Debug.Print FoundCell.Address
执行任何操作,例如。除非您的最终目标是激活该单元格…是的,我希望屏幕焦点转移到该单元格,以便用户可以看到它
I have tried using the code below to iterate through the worksheets. The search is run on the first worksheet and a value found, but subsequently an *Error 91; Object variable or With block variable not set* is generated. Can anyone help me with the iteration please? thanks
For Each Xlsheet In XlBook.Worksheets
With Xlsheet
.Cells.Find(What:=searchstring, After:=.Cells(1, 1), LookIn:=xlvalues, LookAt:=xlPart,
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate
End With
Next
For Each Xlsheet In XlBook.Worksheets
With Xlsheet
Dim foundCell as Range
Set foundCell = .Cells.Find(What:=searchstring, _
After:=.Cells(1, 1), _
LookIn:=xlValues, _
LookAt:=xlPart, _
SearchOrder:=xlByRows, _
SearchDirection:=xlNext, _
MatchCase:=False, _
SearchFormat:=False)
If Not foundCell Is Nothing Then
.Activate
foundCell.Select
Exit For
End If
End With
Next