VBA – 当工作簿()closures时,下标超出范围

我想遍历一个文件夹中的所有excel工作簿,并在每个工作簿的每个工作表的单元格A1中写入string“Test”。 下面的代码导致“下标超出范围(错误9)”。 当我一行一行地运行代码,结果发现错误是由行引起的:
Workbooks(FName).Close Savechanges:=True
存储在FName Dir("C\...")只返回文件名,所以错误不能是因为将完整的path名给予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 

在closures当前打开的工作簿之前,您正在检索下一个工作簿的名称。 切换这两行代码的顺序:

  Workbooks(FName).Close Savechanges:=True FName = Dir() 

您已经有了一个wb工作簿的参考。 只要使用该参考!

 wb.Close SaveChanges:=True 

其他任何东西都是无理由的解引用对象。

这: FName = Dir缺less文件夹名称。 将其更改为:

FName = directory & Dir()