我想遍历文件夹中的所有excel工作簿,并在每个工作簿的每个工作表的单元格A1中写入字符串“Test”。
以下代码导致'下标超出范围(错误9)'。
当我逐行运行代码时,结果是错误是由
线:
Workbooks(FName).Close Savechanges:=True
中存储的Dir("C\...")
FName
只返回文件名,因此错误不可能是因为给Workboooks(...).Close
的完整路径名称成为错误的原因。
除此之外这段代码确实打开了工作簿,而不是只是写入它。我不想要它
以视觉方式打开。
Sub multWB()
Dim FName As String
Dim wb As Workbook
Dim sht As Worksheet
Dim directory As String
directory = "C:\Users\...\Desktop\multipleWorkbooks\"
FName = Dir("C:\Users\...\Desktop\multipleWorkbooks\*.xls*")
Do While FName <> ""
Set wb = Workbooks.Open(directory & FName)
For Each sht In wb.Worksheets
sht.Cells(1, 1) = "Test"
Next
FName = Dir
Workbooks(FName).Close Savechanges:=True 'causes error
Loop
Set wb = Nothing
End Sub
答案 0 :(得分:2)
您已经使用wb
引用了工作簿。只需使用该引用!
wb.Close SaveChanges:=True
其他任何东西都无缘无故地取消引用对象。
答案 1 :(得分:1)
在关闭当前打开的工作簿之前,您正在检索下一个工作簿的名称。切换这两行代码的顺序:
Workbooks(FName).Close Savechanges:=True
FName = Dir()
答案 2 :(得分:0)
这:FName = Dir
缺少文件夹名称。将其更改为:
FName = directory & Dir()