- Определите исходную и целевую рабочую книгу
- Прокрутите исходные рабочие листы и скопируйте
Примерно так должно работать
Public Sub CopyBtoA()
Dim wbSource As Workbook
Set wbSource = Workbooks("fileB.xlsx")
Dim wbDestination As Workbook
Set wbDestination = Workbooks("fileA.xlsx")
Dim ws As Worksheet
For Each ws In wbSource.Worksheets
ws.Range("A1").Copy Destination:=wbDestination.Worksheets(ws.Name).Range("A1")
Next ws
End Sub
Обратите внимание, чтоэто предполагает, что оба файла уже открыты в Excel.В противном случае вам нужно открыть их с помощью Workbooks.Open()
, например:
Set wbSource = Workbooks.Open Filename:="C:\your path\fileB.xlsx"
Не используйте .Activate
или .Select
, они вам не нужны!См. Как избежать использования Select в Excel VBA .
Обратите внимание, что перед копированием я рекомендую проверить, существует ли лист в целевой книге.В противном случае вы столкнетесь с ошибками:
Public Sub CopyBtoA()
Dim wbSource As Workbook
Set wbSource = Workbooks("fileB.xlsx")
Dim wbDestination As Workbook
Set wbDestination = Workbooks("fileA.xlsx")
Dim ws As Worksheet
For Each ws In wbSource.Worksheets
If WorksheetExists(ws.Name, wbDestination) Then
ws.Range("A1").Copy Destination:=wbDestination.Worksheets(ws.Name).Range("A1")
End If
Next ws
End Sub
'check if a worksheet exists
Public Function WorksheetExists(ByVal WorksheetName As String, Optional ByVal wb As Workbook) As Boolean
If wb Is Nothing Then Set wb = ThisWorkbook 'default to thisworkbook
Dim ws As Worksheet
On Error Resume Next
Set ws = wb.Worksheets(WorksheetName)
On Error GoTo 0
WorksheetExists = Not ws Is Nothing
End Function