如果工作表存在,请运行sub。如果没有,显示消息并退出子

时间:2017-11-08 22:41:41

标签: excel vba excel-vba boolean

尽管在其他主题上查找了这个话题,我仍然陷入困境。我想帮助以下内容:

如果宏可以找到名为"转移的工作表,"我希望它激活该表并运行其余的子程序,这使得"转移"最后一张。

如果找不到名为"转移"的图表,我希望如此贴出一条消息(请确保您重命名了数据表:'转移&#39 ;")并退出子。我的代码不起作用。

Sub Double_Transfer_Report()
Dim er As Boolean
er = False

On Error Resume Next
'Worksheets("Transfers").Activate
er = true

If er Then
MsgBox ("Please make sure that you renamed your data sheet : Transfers)
Exit Sub
End If

ActiveSheet.Move _
After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)

4 个答案:

答案 0 :(得分:4)

不要用错误对象做体操。只需通过循环检查工作表是否存在。

Sub Double_Transfer_Report()
    Dim found As Boolean

    found = SheetExists("Transfers")

    If Not found Then
        MsgBox "Please make sure that you renamed your data sheet : Transfers"
    Else
        ActiveSheet.Move After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)
    End If
End Sub

Function SheetExists(strSheetName As String) As Boolean

    Dim wks As Worksheet

    For Each wks In ThisWorkbook.Worksheets

        If wks.Name = strSheetName Then
            SheetExists = True
            Exit Function
        End If
    Next

    SheetExists = False

End Function

答案 1 :(得分:2)

您的想法是尝试激活工作表,如果失败,请记下错误,而不是发生错误。

您可以修改代码,如下所示。修改涉及er变量获取其值的方式。 Activate方法失败后,Err对象将包含错误号(和其他详细信息),直到发生另一个错误或遇到另一个On Error语句(除其他外)。将er(布尔值)设置为逻辑测试Err.Number <> 0将检测到发生了错误。

Sub Double_Transfer_Report()
    Dim er As Boolean

    er = False
    On Error Resume Next
    Worksheets("Transfers").Activate
    er = (Err.Number <> 0)
    On Error GoTo 0

    If er Then
        MsgBox "Please make sure that you renamed your data sheet : Transfers)"
    Else
        ActiveSheet.Move After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)
    End If
End Sub

答案 2 :(得分:0)

如果你可以在某个地方省去两个小区,你可以避免循环和错误处理,比如我们使用 B1 B2 。在 B1 中放置建议的工作表名称并使用以下内容填写 B2

Range("B2").Value = "=ISNUMBER(ROWS(INDIRECT(""'""&B1&""'!A1"")))"

然后检查 B2

中的布尔结果

enter image description here

答案 3 :(得分:0)

只是另一种方法,并不是说它比Cybo Cybou(或者其他答案)更好。

使用Xl4Macro创建一个命名范围,例如SheetExists,并将其放入Refersto:=SUBSTITUTE(GET.WORKBOOK(1),"[" &GET.WORKBOOK(16)&"]","")

现在在任何工作表上都可以添加此(数组)公式,如果工作表可用,它将返回工作表的实际索引。

{=MATCH("Sheet1091",TRANSPOSE(SheetExists),0)}

另一种做事方式。:)