如果工作表存在,运行子。 如果不是,则显示消息并退出子菜单

尽pipe在其他线程上查找这个主题,我仍然被卡住了。 我想帮助以下几点:

如果macros可以find名为“Transfers”的工作表,我希望它激活该工作表并运行其余的子工作,这使得“Transfers”成为最后一个工作表。

如果找不到名为“Transfers”的工作表,我希望这样写一条消息(请确保您已将您的数据表重命名为“Transfers”),然后退出Sub。我的代码不起作用。

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) 

你的想法是尝试激活工作表,如果失败了,请注意不要发生错误。

您可以修改您的代码,如下所示。 修改涉及您的variables获得其价值的方式。 Activate方法失败后, Err对象将包含错误号(和其他详细信息),直到发生另一个错误或遇到另一个On Error语句(等等)。 设置er ,一个布尔值,逻辑testingErr.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 

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


 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 

如果你可以在两个地方空闲两个单元,你可以避免循环和error handling,比如我们使用B1B2 。 在B1中放置build议的工作表名称并使用以下内容填写B2

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

然后检查B2中的布尔结果:

在这里输入图像说明

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

用Xl4Macro(如SheetExists创build一个命名的Range,并将其放在Refersto: =SUBSTITUTE(GET.WORKBOOK(1),"[" &GET.WORKBOOK(16)&"]","")

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

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

只是另一种做事的方式。:)