在excel vba中比较2张缺少工作表的工作簿

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在excel vba中比较2张缺少工作表的工作簿相关的知识,希望对你有一定的参考价值。

我有一个excel宏的要求。这是场景:

我有2本工作簿,说A和B.

工作簿“A”包含,工作表1,工作表2和工作表3,工作簿“B”包含工作表4

现在我需要将工作簿“B”与工作簿A进行比较。如果工作簿“A”中存在工作簿“B”(此处为Sheet1,Sheet2,Sheet3),则需要将这3张工作簿添加到工作簿“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
答案

您可以尝试设置对它的引用,而不是检查每个工作表 - 如果设置了引用,则表单存在,如果它抛出错误,则它不存在。

我会使用一个单独的函数在现有的工作表上返回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

以上是关于在excel vba中比较2张缺少工作表的工作簿的主要内容,如果未能解决你的问题,请参考以下文章

如何正确地从 Excel 工作表的 VBA 连接到另一个 Excel 工作表?

合并Excel工作薄中成绩表的VBA代码,非常适合教育一线的朋友_python

VBA研究如何将Excel工作表的内容更新到数据库

Excel vba引用工作表的三种写法

Excel VBA - 在工作表之间传输数据

在 Excel 中使用 VBA 将所有工作表的填充颜色设置为“无填充”