2015-08-14 14 views
1

後,當打開一個模板的宏是Auto_Open運行這段代碼:如何禁用Auto_Open先救

Sub Auto_Open() 

UserForm.Show 

End Sub 

這就帶來了一個窗體,上面寫着please save as和確定命令按鈕。 enter image description here 單擊確定時,它具有此代碼。

Private Sub SaveAs_Click() 

    Dim bFileSaveAs As Boolean 
    bFileSaveAs = Application.Dialogs(xlDialogSaveAs).Show 
    If Not bFileSaveAs Then MsgBox "User cancelled", vbCritical 

Unload Me 

End Sub 

問題是Auto_Open是跑第一另存爲我希望它永遠不會再次運行後。因爲我希望能夠在彈出的用戶窗體後打開它。那麼如何禁用Auto_Open,一旦其運行並將其保存爲禁用

我無法禁用所有宏,因爲工作簿中還有其他工作簿仍需要工作。

感謝

+0

也許這可能那麼容易,因爲檢查,看看是否[Workbook.Name財產(https://msdn.microsoft.com/en-us/library/office/ff195422.aspx)開頭**書**。 – Jeeped

+0

我剛剛注意到它沒有保存文件,我點擊確定,鍵入保存爲窗口名稱「測試此宏」,並且沒有顯示任何內容,並且模板工作簿保持打開狀態。 – Duraholiday

+1

股票對話框只會提供一個文件夾和名稱。有關更多信息,請參見[Application.GetSaveAsFilename方法](https://msdn.microsoft.com/en-us/library/office/ff195734.aspx)。請注意,他們的示例僅顯示文件名;它實際上並不保存文件。更多在[Workbook.SaveAs方法](https://msdn.microsoft.com/en-us/library/office/ff841185.aspx)。 – Jeeped

回答

2

你有你得到的SaveAsFilename後使用Workbook.SaveAs方法MSDN Found Here ...

至於它運行後刪除子(我做這個之前保存)See here ...您需要使用其他模塊中的Auto Open Sub,以便在保存前刪除該模塊。

Private Sub SaveAs_Click() 

Dim x As Object 
Set x = Application.VBE.ActiveVBProject.VBComponents 
x.Remove VBComponent:=x.Item("TestModule") 'Where TestModule is the module that holds the Auto Open script 

Set NewBook = Workbooks.Add 

Do 
    fName = Application.GetSaveAsFilename 
Loop Until fName <> False 

NewBook.SaveAs Filename:=fName 

fName = False 
Unload Me 

End Sub 
+0

如果它適合您,請不要忘記接受帶有綠色複選標記的答案。 – Chrismas007

+0

我會如何選擇我想要保存的文件。我沒有得到它的工作使用:Private Sub SaveAs_Click() Dim FileSaveName As String FileSaveName = InputBox.Value Workbook(「Book of Name 「).SaveAs FileSaveName 卸載我 結束Sub和私人小組Inputbox_Change() InputBox.Value =」「 結束Sub' – Duraholiday

+0

我計算出來,使用過的'昏暗bFileSaveAs由於布爾 bFileSaveAs = Application.Dialogs( xlDialogSaveAs).Show If bFileSaveAs Then MsgBox「User cancelled」,vbCritical'儘管我仍然需要回答第二個問題。感謝您的幫助 – Duraholiday

-1

退出auto_open如果文件名沒有特定的措詞。

例如:如果文件名不是從「N」開始,則auto_open將退出。

Sub auto_open() 

VBA_CODE = ActiveWorkbook.Name 
If Left(VBA_CODE, 1) <> "N" Then Exit Sub