我想遍历文件夹中的所有 excel 工作簿,并在每个工作簿的每个工作表的单元格 A1 中写入字符串"Test"。 以下代码导致"下标超出范围(错误 9("。 当我逐行运行代码时,结果发现错误是由 行:
存储在FName
中的Workbooks(FName).Close Savechanges:=True
Dir("C...")
仅返回文件名,因此错误不会是因为将完整路径名提供给Workboooks(...).Close
这似乎是错误的原因。
最重要的是,此代码真正打开工作簿,而不仅仅是写入其中。我不要 以可视方式打开。
Sub multWB()
Dim FName As String
Dim wb As Workbook
Dim sht As Worksheet
Dim directory As String
directory = "C:Users...DesktopmultipleWorkbooks"
FName = Dir("C:Users...DesktopmultipleWorkbooks*.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
您已经有对工作簿的引用,其中包含wb
.只需使用该参考!
wb.Close SaveChanges:=True
其他任何东西都是无缘无故地取消引用对象。
在关闭当前打开的工作簿之前,您正在检索下一个工作簿的名称。切换这两行代码的顺序:
Workbooks(FName).Close Savechanges:=True
FName = Dir()
这:FName = Dir
缺少文件夹名称。将其更改为:
FName = directory & Dir()