无法关闭打开的excel工作簿

问题描述 投票:3回答:6

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

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

workbooks.open "path"

在此之后使用userform命令按钮添加以下内容

unload me

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

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

我也试过以下,也没用:

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

任何想法?

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

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

vba excel-vba excel
6个回答
2
投票

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

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

Workbooks.Open "pathname"
Unload Me

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


0
投票

Unload只影响UserForm

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

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

如果您正在执行的操作不是自动化的,则表单上将需要一个按钮,用于设置对工作簿的引用,并在用户完成编辑后将其关闭。


0
投票

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

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

DataBook.Close

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

更多关于Workbooks.Close语句的使用可以在这里找到: - https://msdn.microsoft.com/en-us/library/office/ff838613.aspx


0
投票

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

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

更好的解决方案是删除第三步,并从表单的事件处理程序(UserForm_QueryCloseUserForm_Terminate)中关闭工作簿。或者你可以将它添加到CommandButtonClick事件中,但这与要求用户手动关闭文件没有什么不同。

这可能很简单:

Private Sub UserForm_Terminate()
' should be called when form Unloads
On Error Resume Next
Workbooks.Close "filename.xlsx"
End Sub

以这种方式,文件将在用户关闭或以其他方式卸载用户表单时关闭。


0
投票

好吧,我想我找到了解决办法。

假设我有一个工作簿1,它有一个名为ControlPage的表单,带有命令按钮,可以打开工作簿2。

Private Sub 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时,'激活'位似乎不能正常工作,我只是激活第一个,然后第二个激活一个接一个。扭曲,但为我做了伎俩。

© www.soinside.com 2019 - 2024. All rights reserved.