0

I have 2 files: a and b. Both have multiple sheets with the same sheet names. I want to copy data from b to a to matching sheets. My question is how to activate b file sheet that matches the active sheet name in a, so i don't have to write the name of the sheet everytime

Pᴇʜ
  • 56,719
  • 10
  • 49
  • 73
cristi m
  • 53
  • 2
  • 8
  • something like this: Workbooks("b.xlsx").Activate Sheets("workbooks("a.xlsx").activesheet.name").Activate 'instead of writing sheets("sheet1").activate if sheet1 is the active sheet in file a' Range("A1:A5").select – cristi m Jul 05 '19 at 15:49
  • 2
    Normally you don't need to `Activate`. – BigBen Jul 05 '19 at 15:50

2 Answers2

1
  1. Define your source and destination workbook
  2. Loop through your source worksheets and copy

Something like this should work

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

Note that this assumes that both files are already opened in Excel. Otherwise you need to open them with Workbooks.Open() like:

Set wbSource = Workbooks.Open Filename:="C:\your path\fileB.xlsx"

Don't use .Activate or .Select you don't need them! See How to avoid using Select in Excel VBA.

Note that I recommend to check if the worksheet exists in the destination workbook before you copy. Otherwise you will run into errors:

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
Pᴇʜ
  • 56,719
  • 10
  • 49
  • 73
0
Public Function Sheet_NameSake( _
        ByVal ws_Name As String, _
        wb_Dest As Workbook) _
        As Worksheet

    Set Sheet_NameSake = wb_Dest.Worksheets(ws_Name)

End Function