Поскольку вы начинаете с VBA, я рекомендую вам использовать Option Explicit
в верхней части ваших модулей, это заставит вас объявлять все ваши переменные.
С другой стороны, когда вы объявляетепеременные типа Dim Path, FName As String
only FName
будут String
, Path
будут Variant
.
Использование переменных для объектов книги и листа поможет вам очистить ваш код.
Кроме того, отступ поможет улучшить читабельность кода.
Option Explicit
Sub MergeExcels()
Dim Path As String, FName As String
Dim wb As Workbook
Dim ws As Worksheet
Path = ""
FName = Dir(Path & "*.xlsx")
With ThisWorkbook
Do While FName <> ""
Set wb = Workbooks.Open(Path & FName, ReadOnly:=True)
For Each ws In wb.Worksheets
ws.Copy After:=.Sheets(.Sheets.Count)
Next ws
wb.Close SaveChanges:=False
FName = Dir()
Loop
End With
End Sub
РЕДАКТИРОВАТЬ: Обнаружив свою ошибку, вы указали FName
имя файла, но просматривали FileName
(что всегдапусто).