我正在excel中编写一个VBA宏,它应该打开“fileB.xls”,然后在打开后立即关闭。由于我们将讨论3个excel文件,我将称之为第一个文件A.
文件A的用户窗体上的按钮代码如下所示。
Private Sub CommandButton2_Click()
'Code for Button in FileA '
Workbooks.Open Filename:="File Path/fileB.xls"
ThisWorkbook.Close
End Sub
一旦“fileB.xls”打开,它就会启动一个表单来收集一些用户信息。
但是,在打开“fileB.xls”之后原始文件没有关闭。
Sub Workbook_Open()
'Code in FileB '
'Display a form to obtain information from the user. '
frmOpenFile.Show
End Sub
值得注意的是fileB打开了第三个也是最后一个excel文件(FileC)。在FileB中使用类似于FileA代码的代码,并在启动FileC时工作正常(FileB关闭正常)。
这个想法是有一个“主”文件,您可以在其中选择需要填写的表格。然后,此主文件自行关闭并让用户填写表单,并根据用户输入打开最终的Excel文件。
所以,只是为了重申这个问题,FileA打开,启动用户窗体,用户点击按钮,文件B lauches,FileA不应该关闭它。
我将不胜感激任何帮助!
编辑:我应该注意,如果重写FileA直接打开FileC,FileA会正确关闭。来自FileB的用户表单是否可以阻止文件A关闭?
答案 0 :(得分:4)
是的,这是用户形式。文件C中的用户窗体是非模态的。它与文件B中的文件相反。当文件B打开时,用户窗体打开,所有代码执行都会停止,直到它关闭。使用文件C,代码继续执行。如果将文件B的用户表单属性ShowModal更改为False,它们的工作方式相同。
在VBE中,打开有问题的Userform,然后按F4打开“属性”对话框。找到ShowModal属性并更改为False。
答案 1 :(得分:0)
如果您的工作簿FileA已更改,则系统将提示用户保存工作簿。
根据您正在运行的其他代码,这可能会隐藏在视图中。
要避免此提示,只要您不需要保存更改,此代码就可以使用:
ThisWorkbook.Close SaveChanges = False