我正在使用命令按钮,用户表单等构建一个excel文件,其中包含指向其他工作簿的链接。
对于我工作表上的命令按钮,我使用与用户表单中的命令按钮相同的代码:
workbooks.open "path"
使用userform命令按钮,然后添加以下内容
unload me
当我通过用户窗体打开工作簿时,我无法在之后关闭它。我必须先激活我的工作簿,然后激活打开的工作簿,然后才能关闭它
我试过把“卸载我”放在“workbooks.open”之后,但这并没有改变任何东西。
我也尝试过以下,也没用:
unload me
dim wb as workbook
set wb = workbooks.open"pathname"
wb.activate
任何想法?
现在的示例: 有人需要进行价格计算。他们在我的文件中打开价格userform。他们点击“计算文件”按钮。计算文件打开。他们进行计算,现在他们在计算文件中完成了。所以他们想通过点击十字架来关闭它。但他们无法点击十字架。然后他们切换到任务栏上的文件,然后切换回计算文件。现在他们可以点击十字架了
我不明白为什么他们第一次不能点击它,但他们可以在我和开放工作簿之间切换后点击它。
答案 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按钮)。但是,您当前的工作流程是:
更好的解决方案是删除第三步,然后从表单的某个事件处理程序(UserForm_QueryClose
或UserForm_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时,“激活”位似乎无法正常工作,因此我只激活了第一个,然后又激活了第二个。扭曲但帮了我大忙。