尽管在其他主题上查找了这个话题,我仍然陷入困境。我想帮助以下内容:
如果宏可以找到名为"转移的工作表,"我希望它激活该表并运行其余的子程序,这使得"转移"最后一张。
如果找不到名为"转移"的图表,我希望如此贴出一条消息(请确保您重命名了数据表:'转移&#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)
答案 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 :
中的布尔结果答案 3 :(得分:0)
只是另一种方法,并不是说它比Cybo Cybou(或者其他答案)更好。
使用Xl4Macro创建一个命名范围,例如SheetExists
,并将其放入Refersto:=SUBSTITUTE(GET.WORKBOOK(1),"[" &GET.WORKBOOK(16)&"]","")
现在在任何工作表上都可以添加此(数组)公式,如果工作表可用,它将返回工作表的实际索引。
{=MATCH("Sheet1091",TRANSPOSE(SheetExists),0)}
另一种做事方式。:)