Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用VBA从Access中搜索工作簿中的所有Excel工作表_Excel_Vba_Ms Access - Fatal编程技术网

使用VBA从Access中搜索工作簿中的所有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

下面的代码从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 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