簡體   English   中英

如果存在工作表,請運行sub。 如果不是,則顯示消息並退出子

[英]If Sheet Exists, run sub. If not, display message and exit sub

盡管在其他線程上查找了此主題,但我還是被卡住了。 我需要以下幫助:

如果宏可以找到名為“ Transfers”的工作表,則我希望它激活該工作表並運行其余的子項,從而使“ Transfers”成為最后一個工作表。

如果找不到名為“ Transfers”的工作表,請放一條消息(請確保已將數據表重命名為'Transfers'“)並退出子項。下面的我的代碼無法正常工作。

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)

不要對帶有錯誤對象的體操進行訓練。 只需通過循環檢查工作表是否存在。


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

您的想法是嘗試激活工作表,如果失敗,請注意未發生錯誤。

您可以如下所示修改代碼。 修改與您的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

如果您可以在某個地方備用兩個單元,則可以避免循環和錯誤處理,例如我們使用B1B2 B1中放置建議的工作表名稱,並使用以下命令填寫B2

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

然后檢查B2中的布爾結果:

在此處輸入圖片說明

這只是另一種方法,並不是說它比Cyboashu(或其他答案)更好。

用Xl4Macro創建一個名為Range的工作表,例如SheetExists ,並將其放在Refersto中: =SUBSTITUTE(GET.WORKBOOK(1),"[" &GET.WORKBOOK(16)&"]","")

現在,您可以在任何工作表上添加此(數組)公式,如果有的話,它將返回工作表的實際索引。

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

只是做事的另一種方式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM