如果工作表不存在,则运行宏

23 浏览
0 Comments

如果工作表不存在,则运行宏

我正在尝试只在工作表不存在的情况下运行一组宏。我有一个宏用于创建一个工作表,并将两个工作表的数据合并到其中,另一个宏用于对新工作表进行格式化。由于它需要在工作簿打开时运行,我不能让它一次又一次地重新创建工作表。我一直在尝试以下方法,但它会报错:"子程序或函数未定义":

Private Sub Workbook_Open()
If SheetExist("MyNewSheet") Then
End Sub
Else
Combine
Format
End Sub

0
0 Comments

问题出现的原因是原来的代码中没有对表格是否存在进行判断,所以需要修改测试条件。解决方法是使用函数来确定表格是否存在,可以参考给出的链接中的示例代码。以下是整理的文章:

当工作表存在时,你并没有执行任何操作,所以需要改变你的测试条件。

Private Sub Workbook_Open()
    If Not SheetExist("MyNewSheet") Then
        Combine
        Format
    End If
End Sub
Function SheetExist(sheetname As String) As Boolean
    SheetExist = True ' replace this with code from link below
End Function

请使用这里的答案:Excel VBA If WorkSheet("wsName") Exists,其中有一些确定工作表是否存在的函数的示例代码。

以下是一个可行的解决方案:

Private Sub Workbook_Open()
    If Not e("MyNewSheet") Then
        Combine
        Format
    End If
End Sub
Function e(n As String) As Boolean
    e = False
    For Each ws In Worksheets
        If n = ws.Name Then
            e = True
            Exit Function
        End If
    Next ws
End Function

0
0 Comments

问题的原因是代码中存在错误。在代码中,"SheetExist"应该是"SheetExists",因此会出现编译错误。

要解决这个问题,需要将代码中的"SheetExist"更正为"SheetExists"。修复后的代码如下:

Private Sub Workbook_Open()
If SheetExists("MyNewSheet") Then
    Exit Sub
Else
    Combine
    Format
End If
End Sub

另外,还需要在代码中添加一个名为"SheetExists"的公共函数。该函数用于检查工作簿中是否存在指定名称的工作表。函数代码如下:

Public Function SheetExists(ByVal WorksheetName As String) As Boolean 
On Error Resume Next
SheetExists = (Sheets(WorksheetName).Name <> "")
On Error GoTo 0
End Function

修复后的代码应该能够正常运行。

0