Excel 不带调试选项的下标超出范围错误
我得到这个错误: 下标超出范围 我没有调试选项,只有OK和HELP 一次20,宏工作。剩下的时间我都会犯这个错误 该代码使您选择要搜索的路径,然后在所选路径中选择要在工作簿中查找的文本。它也在子文件夹中搜索。之后,它会发回文件名、工作表名称、单元格以及单元格中的文本 宏将运行,但在搜索4到5个不同的文件后会弹出该错误Excel 不带调试选项的下标超出范围错误,excel,vba,Excel,Vba,我得到这个错误: 下标超出范围 我没有调试选项,只有OK和HELP 一次20,宏工作。剩下的时间我都会犯这个错误 该代码使您选择要搜索的路径,然后在所选路径中选择要在工作簿中查找的文本。它也在子文件夹中搜索。之后,它会发回文件名、工作表名称、单元格以及单元格中的文本 宏将运行,但在搜索4到5个不同的文件后会弹出该错误 Dim AppObject As New Class1 Public WS As Worksheet Sub SearchWKBooksSubFolders(Optional Fo
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将更易于跟踪/调试。注释掉错误处理程序或使它们更具选择性,您可能会发现您遇到了意想不到的错误。您还可以考虑将此分解成单独的方法,例如,创建一个函数,返回一个匹配文件的列表/集合,给定一个起始文件夹。这样,您的逻辑将更易于遵循/调试。