我有一系列可自動執行大部分過程的宏。我想通過Excel Add-In將它分發給我的同事,並且我有一段代碼,但我似乎無法正確使用。Excel VBA:強制用戶保存爲.xlsm
這裏是「主」代碼(正常工作):
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代碼:
這段代碼很簡單,但它並沒有解決取消按鈕。
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
@mooseman問題在於下一個代碼在它退出特定Sub時開始運行,並轉到下一個「Call Format_MIUL」代碼。我怎樣才能讓它從整個代碼中解脫出來? – CC268
你的意思是你從另一個調用這個子類,並希望所有代碼停止選擇取消時?這將需要一個整體設計。也許設置一個全局變量,並設置它,如果userResponse = False。 – mooseman