VBA - 当工作簿()时,下标超出范围。关闭

时间:2017-08-17 19:39:51

标签: excel vba excel-vba file-io

我想遍历文件夹中的所有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

3 个答案:

答案 0 :(得分:2)

您已经使用wb引用了工作簿。只需使用该引用!

wb.Close SaveChanges:=True

其他任何东西都无缘无故地取消引用对象。

答案 1 :(得分:1)

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

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

答案 2 :(得分:0)

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

FName = directory & Dir()