无法关闭打开的excel工作簿

时间:2016-12-20 14:19:48

标签: vba excel-vba excel

我正在使用命令按钮,用户表单等构建一个excel文件,其中包含指向其他工作簿的链接。

对于我工作表上的命令按钮,我使用与用户表单中的命令按钮相同的代码:

workbooks.open "path"

使用userform命令按钮,然后添加以下内容

unload me

当我通过用户窗体打开工作簿时,我无法在之后关闭它。我必须先激活我的工作簿,然后激活打开的工作簿,然后才能关闭它

我试过把“卸载我”放在“workbooks.open”之后,但这并没有改变任何东西。

我也尝试过以下,也没用:

unload me
dim wb as workbook
set wb = workbooks.open"pathname"
wb.activate

任何想法?

现在的示例: 有人需要进行价格计算。他们在我的文件中打开价格userform。他们点击“计算文件”按钮。计算文件打开。他们进行计算,现在他们在计算文件中完成了。所以他们想通过点击十字架来关闭它。但他们无法点击十字架。然后他们切换到任务栏上的文件,然后切换回计算文件。现在他们可以点击十字架了

我不明白为什么他们第一次不能点击它,但他们可以在我和开放工作簿之间切换后点击它。

6 个答案:

答案 0 :(得分:2)

我怀疑这是由于不正确的表单处理和“默认实例”在卸载后重新创建。如果您在显示之前没有创建自己的表单实例,VBA将在您卸载后使用它时执行各种松鼠事务。

如果您只需要打开工作簿并卸载表单,*在卸载表单之前不要增加工作簿的引用计数。此外,从表单中调用Unload Me后,请勿尝试运行任何其他代码。您发布的代码应该是:

Workbooks.Open "pathname"
Unload Me

当然,表单的调用代码不在问题中,但也可以在那里解决。

答案 1 :(得分:0)

Unload仅影响UserForm

尝试添加对打开的工作簿的引用,然后关闭它:

dim wb as Workbook
set wb = Workbooks.Open "pathname"
wb.activate
' do whatever with it while it's open
wb.Close

如果你正在做的事情不是自动化的,你需要一个表单上的按钮来设置对工作簿的引用,并在用户完成编辑后关闭它。

答案 2 :(得分:0)

如果您将作为变量打开的工作簿定义 - 您将能够轻松地关闭它们。请记住,这不会保存工作簿。

Dim DataBook As Workbook
Set DataBook = Workbooks.open ("pathname")
' Do something useful with the file

DataBook.Close

答案 3 :(得分:0)

目前还不完全清楚你要问的是什么,但我会尽力为你提供一个完整的答案。如果在关闭用户表单时使用Unload Me语句没有成功,请尝试在VBA中指定完整的表单名称。那就是:

Unload UserFormName

如果您尝试关闭已打开的工作簿(通过用户表单),则可以使用Workbooks.Close方法:

Dim wb as Workbook
Set wb = Workbooks.Open(Filename:="C:\example.xls") 
wb.Activate
'Close workbook
wb.Close
'Unload form
Unload ExampleForm

有关使用Unload语句的更多信息,请访问: - https://msdn.microsoft.com/en-us/library/aa445829(v=vs.60).aspx

有关使用Workbook.Close语句的更多信息,请访问: - https://msdn.microsoft.com/en-us/library/office/ff838613.aspx

答案 4 :(得分:0)

我不确定导致您描述的行为的原因(无法点击活动Excel窗口中的"关闭" X按钮)。但是,您当前的工作流程是:

  1. 用户与表单进行交互以查看/访问文件
  2. 用户点击表单上的一个按钮,用于卸载表单
  3. 然后,用户需要手动关闭(1)
  4. 中打开的文件

    更好的解决方案是删除第三步,然后从表单的某个事件处理程序(UserForm_QueryCloseUserForm_Terminate)关闭工作簿。或者,您可以将其添加到CommandButton的{​​{1}}事件中,但这与要求用户手动关闭文件的情况并无太大差别。

    这可以很简单:

    Click

    以这种方式,只要用户关闭或以其他方式卸载用户表单,文件就会被关闭。

答案 5 :(得分:0)

好的,我想我找到了解决方法。

比方说,我有一个工作簿1,该工作簿具有一个名为ControlPage的窗体,该窗体带有打开工作簿2的命令按钮。

私人子CommandButton1_Click()

Dim workbook2 As Workbook
Dim workbook1name As String
workbook1name = ThisWorkbook.name

Set workbook2 = Workbooks.Open("workbook2.xlsx")
ControlPage.Hide
Workbooks(workbook1name).Activate
Workbooks("workbook2.xlsx").Activate

End Sub

所以基本上,因为当我尝试立即激活工作簿2时,“激活”位似乎无法正常工作,因此我只激活了第一个,然后又激活了第二个。扭曲但帮了我大忙。