【发布时间】:2021-05-19 23:24:49
【问题描述】:
Call_Process 调用多个宏,每个宏都依赖于前一个宏。第一个宏获取文件位置,然后打开该文件夹中的文件,最后一个关闭并保存更改。问题是如果打开文件不存在,以下宏将出错。如果找不到文件,如何取消整个 Call_Process?
Sub Call_Process ()
Call File_Location
Call Open_File
Call Exit_WB
End Sub
**Sub File_Location ()**
location_db = "C:\Users\Documents\New folder\*.xl??"
End Sub ()
**Sub Open_File ()**
dim wb as Workbook
dim ws as Worksheet
if dir(location_db) = "" <- as you can see if the file doesnt exists, it exits out of Open_File sub but not the Exit_WB when im running the Call_Process
end sub
end if
wb_filename = wb.name
sheet_name = ws.name
End Sub
**Sub Exit_WB**
Workbooks(location_db).close savechanges=TRUE
End Sub
【问题讨论】:
-
Try on error goto: on your Call process?
-
试试“结束”?
-
File_Location应该是一个属性或一个函数,如果不只是一个普通的Const声明。location_db没有理由是全局的,而是让Open_File将其作为参数接收。如果文件不存在,则在调用范围(即Call_Process)中引发运行时错误并处理它,使用On Error语句将执行重定向到提前退出(@ 987654328@ 应该足够了)发生错误时。End语句会破坏所有全局变量。使Open_File成为一个返回Workbook引用的函数,这样Exit_WB就不需要去找它了。