我正在尝试在包含多个文件的文件夹中查找字符串。找到字符串后,它应该选择并复制右侧 5 列相邻单元格中的值(Offset(0,5))
,然后将其粘贴到我的工作簿中。如果找到更多字符串,则应将它们粘贴为列表 End(xlDown)。
这是个主意,但我无法让它发挥作用,错误信息:“下标超出范围“。
Sub searchBOM()
Dim BOM As String 'the text i'm gonna look for
Dim path As String 'the folder containing several files
Dim filename As String 'one of the files to search in
path = "D:\folder\"
filename = Dir(path)
BOM = InputBox("please enter bom code") 'where the user enters the string
If BOM = "" Then
MsgBox ("please input valid BOM code") 'not important really, just a small validation
Else
Do While filename <> "" 'so the DIR function scans all files
**'here I get the error message SUBSCRIPT OUT OF RANGE:**
Workbooks.Open(path & filename).Sheets("Sheet1").UsedRange.Find(BOM).Offset(0, 5).Copy
'the macro never gets to this line:
ThisWorkbook.Sheets("Sheet1").Range("c" & Range("c5").End(xlDown).Row).Paste
Workbooks.Open(path & filename).Close
filename = Dir
Loop
End If
End Sub
答案1
以下是我接近真正问题的方法:
将导致问题的很长的行拆分成较小的部分,例如
Set wrkbk = Workbooks.Open(path & filename)
Set sht = wrkbk.Sheets("Sheet1")
Set rang = sht.UsedRange
Set fnd = rang.Find(BOM)
If Not (fnd Is Nothing) Then
cpy = fnd.Offset(0, 5).Copy
End If
然后你就会发现问题就出在这行Set sht = wrkbk.Sheets("Sheet1")
。
这意味着:有一个工作簿没有名为“Sheet1”的工作表。也许该工作表已被用户重命名。
当 Excel 出现错误时停止,右键单击filename
并选择Add watch
查看哪个文件受到错误工作表名称的影响。