2010-02-17 148 views
2

我正在写一个VBA宏,应该打开“fileB.xls”,然后在打开后立即关闭。由于我们将讨论3个excel文件,我将称其为第一个文件A。VBA“ThisWorkbook.Close”不关闭此工作簿!

文件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开启,FileA在它应该关闭时不会关闭。

我将不胜感激任何帮助!

编辑:我应该注意,如果重写FileA直接打开FileC,FileA正确关闭。用户可以从FileB中创建防止文件A关闭吗?

回答

4

是的,它的窗体。文件C中的用户表单是非模态的。它与文件B中的相反。当文件B打开时,用户窗体打开,所有代码执行停止,直到它关闭。使用文件C,代码继续执行。如果将文件B的用户窗体属性ShowModal更改为False,则它们的工作原理将相同。

在VBE中,打开有问题的用户窗体并按F4打开属性对话框。找到ShowModal属性并将其更改为False。

+1

主席先生,你是男性中的上帝。 早上的大部分时间里,我一直在抨击我。 – Sumason 2010-02-17 18:17:11

0

如果您的工作簿FileA已更改,则会提示用户保存工作簿。

根据您正在运行的其他代码,这可能会被隐藏。

为了避免出现此提示,只要你并不需要保存更改,此代码将工作:

ThisWorkbook.Close SaveChanges = False 
+0

感谢您的帮助。不幸的是,问题依然存在,但我真的应该在那里,永远不知道用户会做什么。 – Sumason 2010-02-17 16:14:56

+0

如果您确实需要保存更改,请将savechanges更改为true。 – guitarthrower 2010-02-17 17:50:54

相关问题