Ошибка довольно объяснительная - вы просите VBA зациклить каждую рабочую книгу строки.Единственное, что является «зацикленным» в строке, это ее символы.Таким образом, VBA не подозревает, что String
на самом деле является папкой на вашем ПК, содержащей рабочие книги.
Это способ перебрать файлы Excel в заданной папке:
Option Explicit
Sub SelectFolder()
Dim wb As Workbook
Dim fileInFolder As String
fileInFolder = Dir("C:\Users\user\Desktop\Neuer Ordner\")
Do While Len(fileInFolder) > 0
If Right(fileInFolder, 4) = "xlsx" Then
Debug.Print fileInFolder
End If
fileInFolder = Dir
Loop
End Sub
Используется тот факт, что ваши файлы Excel, вероятно, имеют расширение xlsx
, таким образом, он проверяетпоследние 4 буквы имени файла.
Поскольку вы пытаетесь открыть книги и что-то с ними сделать, это хорошее руководство, как это сделать:
Option Explicit
Sub SelectFolder()
Dim wb As Workbook
Dim fileInFolder As String
Dim initialDir As String
initialDir = "C:\Users\user\Desktop\Neuer Ordner\"
fileInFolder = Dir(initialDir)
Do While Len(fileInFolder) > 0
If Right(fileInFolder, 4) = "xlsx" Then
Set wb = Workbooks.Open(initialDir & fileInFolder)
Debug.Print wb.Name
Debug.Print wb.Path
End If
fileInFolder = Dir
Loop
For Each wb In Workbooks
If wb.Name <> ThisWorkbook.Name Then
Debug.Print wb.Name & " is closed!"
wb.Close savechanges:=True
End If
Next wb
End Sub
В конце кода он просматривает все рабочие книги, открывается в одном и том же экземпляре и закрывает все из них, кроме рабочей книги, в которой находится код (If wb.Name <> ThisWorkbook.Name Then
).