Активировать лист на основе имени листа из другого файла - PullRequest
1 голос
/ 05 июля 2019

У меня есть 2 файла: а и б.Оба имеют несколько листов с одинаковыми именами.Я хочу скопировать данные из b в a на соответствующие листы.У меня вопрос, как активировать файл листа b, который соответствует имени активного листа в a, поэтому мне не нужно каждый раз писать имя листа

Ответы [ 2 ]

1 голос
/ 05 июля 2019
  1. Определите исходную и целевую рабочую книгу
  2. Прокрутите исходные рабочие листы и скопируйте

Примерно так должно работать

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
0 голосов
/ 06 июля 2019
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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...