2016-12-20 90 views
1

我正在建立一个包含指向其他工作簿的链接的命令按钮,用户表单等excel文件。无法关闭打开的Excel工作簿

有关我的表中的CommandButton控件我使用相同的代码,在我的用户窗体CommandButton控件:

workbooks.open "path" 

与用户窗体CommandButton控件亚特此加入

unload me 

当我打开以下通过用户表单工作簿我无法关闭它之后。我必须首先激活我的工作簿,然后激活打开的一个,然后才可以关闭它

我曾尝试将“卸载我”放在“workbooks.open”之后,但这不会改变任何内容。

我也试过跟随着,也没有工作:

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

任何人任何想法?

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

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

+1

我没有看到任何代码,您尝试在这里关闭工作簿...... – Sorceri

+0

我正在通过单击十字架来讨论关闭。我打开带有信息的工作簿,在某人看到他们需要的信息后,他们想要再次关闭工作簿。然而,用我的代码,你需要在工作簿之间切换,然后你可以点击十字架 – Mick17

+0

我不知道什么会导致这种情况,但你知道'workbooks.Open'方法设置了一个新的* active *工作簿,所以你的'wb。激活'语句没有做任何额外的事情。在'wb.Activate'之前插入'ThisWorkbook.Activate',看看是否存在解决方案。 –

回答

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

比你的帮助,但我认为我的问题不够清楚。我不想在我打开的工作簿中更改任何内容。我们使用了许多不同位置的不同excel文件。我正在创建一个可以打开实际需要的文件的excel文件。将其视为“链接”文件。如果我通过工作簿打开工作簿,则需要在我的工作簿和打开的工作簿之间切换,然后才能通过单击交叉来关闭打开的工作簿。 – Mick17

+0

因此,您想单击按钮打开工作簿,然后隐藏用户窗体并显示新打开的工作簿?并在用户手动关闭工作簿,你希望用户窗体重新出现或什么? – Dave

+0

例如:有人需要该文件来计算价格。他们在我的文件中打开价格userform。他们点击按钮“计算文件”。计算文件打开。他们在那里做计算,现在他们完成了这个文件。他们想要通过点击十字再次关闭该文件,但现在他们不能点击十字。他们需要切换到我的文件,切换回计算文件,现在他们可以点击十字。我不明白他们为什么第一次不能点击它,但是他们可以在工作簿之间切换后点击它。 – Mick17

0

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

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

DataBook.Close 
+0

比你的帮助更好,但我认为我的问题还不够清楚。我不想在我打开的工作簿中更改任何内容。我们使用了许多不同位置的不同excel文件。我正在创建一个可以打开实际需要的文件的excel文件。将其视为“链接”文件。如果我通过工作簿打开工作簿,则需要在我的工作簿和打开的工作簿之间切换,然后才能通过单击交叉关闭打开的工作簿。 – Mick17

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 

更多使用的卸载语句可以在这里找到: - https://msdn.microsoft.com/en-us/library/aa445829(v=vs.60).aspx

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

1

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

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

Workbooks.Open "pathname" 
Unload Me 

当然对于形式调用代码不是问题,但它可能可以有解决为好。

+0

谢谢您提供的信息,如果我可以使用此工具。调用代码很简单:userform1.show – Mick17

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 

以这种方式,该文件将被关闭用户关闭或以其它方式卸载用户窗体任何时间:作为

这可能是一样简单。

相关问题