Vba 如果工作表存在,则运行sub。如果不存在,则显示消息并退出sub
尽管在其他线程上查找此主题,但我还是被卡住了。我希望得到以下方面的帮助: 如果宏可以找到一个名为“Transfers”的工作表,我希望它激活该工作表并运行sub的其余部分,从而使“Transfers”成为最后一个工作表 如果找不到名为“传输”的工作表,我希望它能显示一条消息(请确保您将数据表重命名为“传输”),然后退出sub。我下面的代码不起作用Vba 如果工作表存在,则运行sub。如果不存在,则显示消息并退出sub,vba,excel,boolean,Vba,Excel,Boolean,尽管在其他线程上查找此主题,但我还是被卡住了。我希望得到以下方面的帮助: 如果宏可以找到一个名为“Transfers”的工作表,我希望它激活该工作表并运行sub的其余部分,从而使“Transfers”成为最后一个工作表 如果找不到名为“传输”的工作表,我希望它能显示一条消息(请确保您将数据表重命名为“传输”),然后退出sub。我下面的代码不起作用 Sub Double_Transfer_Report() Dim er As Boolean er = False On Error Resume
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 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
您可以按如下所示修改代码。修改涉及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
Sub-Double\u Transfer\u Report()
作为布尔值的dimer
er=假
出错时继续下一步
工作表(“传输”)。激活
er=(错误编号0)
错误转到0
如果呃那么
MsgBox“请确保您重命名了数据表:传输)”
其他的
ActiveSheet.Move After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)
如果结束
端接头
您的想法是尝试激活工作表,如果激活失败,请注意是否发生了错误
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
您可以按如下所示修改代码。修改涉及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
Sub-Double\u Transfer\u Report()
作为布尔值的dimer
er=假
出错时继续下一步
工作表(“传输”)。激活
er=(错误编号0)
错误转到0
如果呃那么
MsgBox“请确保您重命名了数据表:传输)”
其他的
ActiveSheet.Move After:=ActiveWorkbook.Sheets(ActiveWorkbook.Sheets.Count)
如果结束
端接头
不要使用错误对象进行体操。只需通过循环检查该表是否存在
不要用错误对象做体操。只需通过循环检查该表是否存在
如果您可以在某处留出两个单元格,则可以避免循环和错误处理,例如我们使用B1和B2。在B1中放置建议的工作表名称,并使用以下方法填写B2:
Range("B2").Value = "=ISNUMBER(ROWS(INDIRECT(""'""&B1&""'!A1"")))"
然后检查B2中的布尔结果:
如果您可以在某处留出两个单元格,您可以避免循环和错误处理,例如我们使用B1和B2。在B1中放置建议的工作表名称,并使用以下方法填写B2:
Range("B2").Value = "=ISNUMBER(ROWS(INDIRECT(""'""&B1&""'!A1"")))"
然后检查B2中的布尔结果:
只是另一种方法,并不是说它比Cyboashu的(或else的答案)更好 使用Xl4Macro创建一个命名范围,例如
SheetExists
,并将其放入引用中:=SUBSTITUTE(GET.WORKBOOK(1),“[”&GET.WORKBOOK(16)&“],”)
现在,您可以在任何工作表上添加此(数组)公式,它将返回工作表的实际索引(如果可用)
{=MATCH(“Sheet1091”,转置(SheetExists),0)}
只是另一种做事方式。:只是另一种方式,并不是说它比Cyboashu的(或else的答案)更好 使用Xl4Macro创建一个命名范围,例如
SheetExists
,并将其放入引用中:=SUBSTITUTE(GET.WORKBOOK(1),“[”&GET.WORKBOOK(16)&“],”)
现在,您可以在任何工作表上添加此(数组)公式,它将返回工作表的实际索引(如果可用)
{=MATCH(“Sheet1091”,转置(SheetExists),0)}
这是另一种处理方法。
如果er-Then
可以重写为如果为True,那么-这是完全无条件的编译时常量,无论是否发生错误。在错误恢复下一步
的意思正是:如果有错误,下一行将执行,因此您需要检查某个地方的Err.Number
,以获得有用的条件。如果er-Then
可以重写为如果为True,则
-无论是否发生错误,它都是完全无条件的编译时常量。在error Resume Next上
的意思就是:如果有错误,下一行e不管怎样执行-因此你需要在某个地方检查Err.Number
,以获得一个有用的条件。这是可行的,但如果工作簿包含很多很多工作表,效率将毫无用处。尽管如此,将逻辑抽象为其自己的专用功能还是值得称赞的。同意,它确实增加了一层执行。但是,对于1200张工作表,它需要no找到工作表存在的时间到了。如果我们有更多的工作表,那么就有更大的问题要处理。:)很遗憾Excel集合没有公开Exists方法。@Excelosaurus是Excel的局限性让这项工作保持了趣味性。:)只有四到五张工作表,这样就行了。谢谢!这很有效,但没有用。@Excelosaurus如果工作簿包含很多很多工作表,则效率低下。不过,将逻辑抽象为自己的专用功能是值得称赞的。同意的,它确实增加了一层执行。但是有1200张工作表,就不需要花时间去发现工作表的存在。如果我们有更多的工作表