[英]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
這只是另一種方法,並不是說它比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.