Excel VBA:强制用户另存为.xlsm

时间:2017-10-11 15:37:36

标签: excel vba excel-vba

我有一系列宏可以自动完成大部分流程。我想通过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"。我希望用户做的第一件事是将文件保存为启用宏的文件。理想情况下,我希望代码为用户执行以下操作:

  1. 强制用户另存为.xlsm
  2. 在“另存为”对话框中提供当前文件名,以便它们具有可以使用的文件名。
  3. 如果按下CANCEL按钮,则必须停止整个宏!
  4. 我认为这将是一件相当简单的事情,但到目前为止它一直是我代码中最棘手的部分。

    以下是我为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
    

    由于某种原因,这并没有解决取消按钮。

    我已经尝试了六种不同的东西,其中大部分与上述代码类似。

    感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

你有这个:

If FileDialog.Show = False Then
    Exit Sub
End If

这不会导致错误,仅仅是识别状态。如果只有错误,您将需要Exit Sub。

可以通过替换:

来实现此错误处理
On Error Resume Next  
userResponse = Application.Dialogs(xlDialogSaveAs).Show(52) 
On Error GoTo 0 
If userResponse = False Then
    Exit Sub 
Else 
End If

使用:

On Error GoTo Cat  
userResponse = Application.Dialogs(xlDialogSaveAs).Show(52) 

Cat: 
    Exit Sub