2015-08-14 48 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