【发布时间】:2017-10-11 15:37:35
【问题描述】:
我有一系列可以自动执行大部分流程的宏。我想通过 Excel 插件将它分发给我的同事,但我有一段代码似乎无法正确处理。
这是“主”代码(工作正常):
Option Explicit
Sub MIUL_Run_All()
Dim StartTime As Double
Dim SecondsElapsed As String
'Remember time when macro starts
StartTime = Timer
Call OptimizeCode_Begin
Call Save_As
Call Format_MIUL
Call Custom_Sort_MIUL
Call Insert_Process_List
Call Format_Process_List
Call OptimizeCode_End
'Determine how many seconds code took to run
SecondsElapsed = Format((Timer - StartTime) / 86400, "ss")
'Notify user in seconds
MsgBox "This code ran successfully in " & SecondsElapsed & " seconds",
vbInformation
End Sub
给我带来麻烦的代码是“Save_As”。我希望用户做的第一件事是将文件保存为启用宏的文件。理想情况下,我希望代码为用户做这些事情:
- 强制用户另存为 .xlsm
- 在“另存为”对话框中提供当前文件名,以便他们拥有可以使用的文件名。
- 如果按下 CANCEL 按钮,它必须停止整个宏!
我认为这将是一件相当微不足道的事情,但到目前为止,它一直是我的代码中最困难的部分。
这是我为 Save_As 代码尝试过的:
Application.Dialogs(xlDialogSaveAs).Show , xlOpenXMLWorkbookMacroEnabled
这段代码很简单,但它没有处理取消按钮。
Dim userResponse As Boolean
On Error Resume Next
userResponse = Application.Dialogs(xlDialogSaveAs).Show(52)
On Error GoTo 0
If userResponse = False Then
Exit Sub
Else
End If
由于某种原因,这再次没有解决取消按钮。
我已经尝试了大概六种不同的东西,其中大部分都与上面的代码相似。
感谢任何帮助。
【问题讨论】:
-
userResponse = Application.Dialogs(xlDialogSaveAs).Show(52) 将弹出以 52.xlsx 作为文件名的对话框。对话框的第一个参数是文件名。 52 作为第二个参数将强制使用 XLSM 文件类型。我运行了你的代码,它运行良好。我不确定您是否需要错误行。
-
@mooseman 问题是下一个代码在退出该特定 Sub 时开始运行,并移至下一个代码“Call Format_MIUL”。我怎样才能让它脱离整个代码?
-
你的意思是你从另一个调用这个子并且希望所有代码在选择取消时停止?这将需要一个整体设计。也许设置一个全局变量并在 userResponse = False 时设置它。