Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.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
Excel 不带调试选项的下标超出范围错误_Excel_Vba - Fatal编程技术网

Excel 不带调试选项的下标超出范围错误

Excel 不带调试选项的下标超出范围错误,excel,vba,Excel,Vba,我得到这个错误: 下标超出范围 我没有调试选项,只有OK和HELP 一次20,宏工作。剩下的时间我都会犯这个错误 该代码使您选择要搜索的路径,然后在所选路径中选择要在工作簿中查找的文本。它也在子文件夹中搜索。之后,它会发回文件名、工作表名称、单元格以及单元格中的文本 宏将运行,但在搜索4到5个不同的文件后会弹出该错误 Dim AppObject As New Class1 Public WS As Worksheet Sub SearchWKBooksSubFolders(Optional Fo

我得到这个错误:

下标超出范围

我没有调试选项,只有OK和HELP

一次20,宏工作。剩下的时间我都会犯这个错误

该代码使您选择要搜索的路径,然后在所选路径中选择要在工作簿中查找的文本。它也在子文件夹中搜索。之后,它会发回文件名、工作表名称、单元格以及单元格中的文本

宏将运行,但在搜索4到5个不同的文件后会弹出该错误

Dim AppObject As New Class1
Public WS As Worksheet
Sub SearchWKBooksSubFolders(Optional Folderpath As Variant, Optional Str As Variant)
Dim myfolder As String
Dim a As Single
Dim sht As Worksheet
Dim Lrow As Single
Dim Folders() As String
Dim Folder As Variant
ReDim Folders(0)
Dim wbk As Workbook

If IsMissing(Folderpath) Then
    Set WS = Sheets.Add

    With Application.FileDialog(msoFileDialogFolderPicker)
        .Show
        myfolder = .SelectedItems(1) & "\"
    End With

    Str = Application.InputBox(prompt:="Nom de la Personne:", Title:="Personne a chercher", Type:=2)

    If Str = "" Then Exit Sub

    WS.Range("A1") = "Semaine"
    WS.Range("B1") = "Journée"
    WS.Range("C1") = "Cellule"
    WS.Range("D1") = "Nom"

    Folderpath = myfolder

    Value = Dir(myfolder, &H1F)
Else
    If Right(Folderpath, 2) = "\\" Then
        Exit Sub
    End If
    Value = Dir(Folderpath, &H1F)
End If

Do Until Value = ""
    If Value = "." Or Value = ".." Then
    Else
        If GetAttr(Folderpath & Value) = 16 Then
            Folders(UBound(Folders)) = Value
            ReDim Preserve Folders(UBound(Folders) + 1)

        ElseIf Right(Value, 3) = "xls" Or Right(Value, 4) = "xlsx" Or Right(Value, 4) = "xlsm" Then
            On Error Resume Next
            Workbooks.Open Filename:=Folderpath & Value, Password:="zzzzzzzzzzzz"
            If Err.Number <> 0 Then
                WS.Range("A4").Offset(a, 0).Value = Value
                WS.Range("B4").Offset(a, 0).Value = "Password protected"
                a = a + 1
                On Error GoTo 0
            Else
                For Each sht In ActiveWorkbook.Worksheets
                    'Expand all groups in sheet
                    sht.Outline.ShowLevels RowLevels:=8, ColumnLevels:=8
                    Set c = sht.Cells.Find(Str)
                    If Not c Is Nothing Then
                        firstAddress = c.Address
                        Do
                            Lrow = WS.Range("A" & Rows.Count).End(xlUp).Row
                            WS.Range("A1").Offset(Lrow, 0).Value = Value
                            WS.Range("B1").Offset(Lrow, 0).Value = sht.Name
                            WS.Range("C1").Offset(Lrow, 0).Value = c.Address
                            WS.Range("D1").Offset(Lrow, 0).Value = c.Value
                            Set c = sht.Cells.FindNext(c)
                        Loop While Not c Is Nothing And c.Address <> firstAddress
                    End If
                Next sht
            End If
            Workbooks(Value).Close False
            On Error GoTo 0
        End If
    End If
    Value = Dir
Loop
For Each Folder In Folders
    SearchWKBooksSubFolders (Folderpath & Folder & "\")
Next Folder
Cells.EntireColumn.AutoFit

End Sub
Dim AppObject作为新类1
公共WS-As工作表
子SearchWKBooks子文件夹(可选Folderpath作为变量,可选Str作为变量)
将myfolder设置为字符串
黯然失色
将sht变暗为工作表
昏暗的灯光如同单身
将文件夹()设置为字符串
Dim文件夹作为变体
重拨文件夹(0)
将wbk设置为工作簿
如果是missing(Folderpath),则
设置WS=Sheets.Add
使用Application.FileDialog(msoFileDialogFolderPicker)
显示
myfolder=.SelectedItems(1)和“\”
以
Str=Application.InputBox(提示:=“人员名称:”,标题:=“人员名称”,类型:=2)
如果Str=”“,则退出Sub
WS.Range(“A1”)=“Semaine”
WS.Range(“B1”)=“日记”
WS.Range(“C1”)=“细胞”
WS.Range(“D1”)=“Nom”
Folderpath=myfolder
Value=Dir(myfolder,&H1F)
其他的
如果Right(Folderpath,2)=“\\”则
出口接头
如果结束
Value=Dir(文件夹路径和H1F)
如果结束
Do Until Value=“”
如果Value=“”或Value=“…”则
其他的
如果GetAttr(Folderpath&Value)=16,则
文件夹(UBound(Folders))=值
重拨保留文件夹(UBound(文件夹)+1)
如果右(值,3)=“xls”或右(值,4)=“xlsx”或右(值,4)=“xlsm”,则
出错时继续下一步
工作簿。打开文件名:=文件夹路径和值,密码:=“zzzzzzzz”
如果错误号为0,则
WS.Range(“A4”)。偏移量(a,0)。值=值
WS.Range(“B4”).Offset(a,0).Value=“受密码保护”
a=a+1
错误转到0
其他的
对于ActiveWorkbook.工作表中的每个sht
'展开工作表中的所有组
sht.Outline.ShowLevels行级别:=8,列级别:=8
Set c=sht.Cells.Find(Str)
如果不是,那么c什么都不是
firstAddress=c.地址
做
Lrow=WS.Range(“A”&Rows.Count).End(xlUp).Row
WS.Range(“A1”).偏移量(Lrow,0)。值=值
WS.Range(“B1”).Offset(Lrow,0).Value=sht.Name
WS.Range(“C1”).偏移量(Lrow,0)。值=c.地址
WS.范围(“D1”).偏移量(Lrow,0)。值=c.值
集合c=sht.Cells.FindNext(c)
循环而不是c为Nothing,c.Address为firstAddress
如果结束
下一步
如果结束
工作簿(值)。关闭False
错误转到0
如果结束
如果结束
Value=Dir
环
对于文件夹中的每个文件夹
SearchWKBooks子文件夹(文件夹路径和文件夹&“\”)
下一个文件夹
Cells.EntireColumn.AutoFit
端接头

您可以在没有IDE调试器的情况下自行调试。 只需将
置于错误恢复下一步
/
置于错误转到0
非常接近的位置,以限制可能引发错误的语句。即错误转到0时的第二个
太远

我可以更有效地调试,只需在语句之间插入如下内容:

a = a + 1
debug.print "I am here"
b = b -5
debug.print "I am there"
c = 5 / 0
debug.print "You can't see me"

因此,您可以在出现错误时找到

您好,欢迎使用So。请阅读和提问指南:错误发生在哪里?
选项显式
,为什么使用
&H1F
而不是更具描述性或vba常量?请注释错误处理程序或使其更具选择性,您可能会发现您遇到了意想不到的错误。您还应该考虑将此分解为单独的方法,例如,创建一个函数返回一个列表/匹配文件的集合,给定一个起始文件夹。然后,您的locig将更易于跟踪/调试。注释掉错误处理程序或使它们更具选择性,您可能会发现您遇到了意想不到的错误。您还可以考虑将此分解成单独的方法,例如,创建一个函数,返回一个匹配文件的列表/集合,给定一个起始文件夹。这样,您的逻辑将更易于遵循/调试。