Сравнение 2 рабочих книг для отсутствующего листа в Excel VBA - PullRequest
0 голосов
/ 05 декабря 2018

У меня было требование в макросе Excel.Вот сценарий:

У меня есть 2 рабочие книги, скажем, A и B

Рабочая книга "A" содержит лист 1, sheet2 и sheet3, Рабочая книга "B" содержит sheet4

Теперь мне нужно сравнить книгу "B" с книгой A. Если лист существует в книге "A", которой нет в книге "B" (здесь Sheet1, Sheet2, Sheet3), то мне нужно добавить эти 3 листа в Workbook "B "

Итак, наконец, рабочая тетрадь B должна содержать: лист 1, лист 2, лист 3 и лист 4.

Пробный код, но он не работает.

Set act = ThisWorkbook
path = Sheet1.TextBox1.Text
Set owb = Workbooks.Open(Filename:=path)
For Each ws In ThisWorkbook.Worksheets
    a = ws.Name
    For Each ws1 In owb.Worksheets
       If ws1.Name = a Then
          MsgBox "Found"
       Else
          Set wsnew = owb.Sheets.Add
          wsnew.Name = a
       End If
     Next ws1
Next ws

1 Ответ

0 голосов
/ 05 декабря 2018

Вместо того, чтобы проверять каждый лист, вы можете попытаться установить ссылку на него - если ссылка установлена, тогда лист существует, если он выдает ошибку, то он не существует.

Я бы использовал отдельную функцию для возврата TRUE / FALSE на существующий лист - один из немногих случаев, когда я использовал бы On Error Resume Next, чтобы игнорировать любые ошибки.

Public Sub CopySheets()

    Dim wrkBk As Workbook
    Dim wrkSht As Worksheet
    Dim wrkShtNew As Worksheet

    Set wrkBk = Workbooks("Book2")

    For Each wrkSht In ThisWorkbook.Worksheets
        If Not WorkSheetExists(wrkSht.Name, wrkBk) Then
            Set wrkShtNew = wrkBk.Worksheets.Add
            wrkShtNew.Name = wrkSht.Name
        Else
            MsgBox wrkSht.Name & " exists.", vbOKOnly + vbInformation
        End If
    Next wrkSht

End Sub

Public Function WorkSheetExists(SheetName As String, Optional wrkBk As Workbook) As Boolean
    Dim wrkSht As Worksheet

    If wrkBk Is Nothing Then
        Set wrkBk = ThisWorkbook
    End If

    On Error Resume Next
        Set wrkSht = wrkBk.Worksheets(SheetName)
        WorkSheetExists = (Err.Number = 0)
        Set wrkSht = Nothing
    On Error GoTo 0

End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...