I am building a excel file with commandbuttons, userforms etc. that contain links to other workbooks.
For the commandbuttons on my sheet I use the same code as for the commandbuttons in my userforms:
with the userform commandbuttons ater this the following is added
When I open a workbook via a userform I am unable to close it afterwards. I must activate my workbook first, then activate the opened one and then can I close it
I have tried putting “unload me” befor and after the “workbooks.open” but this doesn’t change anything.
I also tried the followin, also didn’t work:
unload me dim wb as workbook set wb = workbooks.open"pathname" wb.activate
anyone any ideas?
Example of how it is now:
Someone needs to make a price calculation. they open the prices userform in my file. they click on the button “calculationfile”. The calculationfile opens. they make there calculation and now they are finished in the calculationfile. So they want to close it by clicking on the cross. But they can’t click the cross. then they switch to my file on the taskbar and then switch back to the calculation file. now they are able of clicking the cross
I dont understand why they can’t click it the first time but they can click it after switching between mine and the openend workbook.
I suspect this is due to improper form handling and the “default instance” recreating itself after you unload it. If you don’t create your own instance of the form before you show it, VBA will do all kinds of squirrelly things when you use it after it’s unloaded.
If all you need to do is open a workbook and unload the form, *don’t increment the workbook’s reference count before you unload the form. Also, don’t attempt to run any other code after you call
Unload Me from the form. The code you posted should simply be:
Workbooks.Open "pathname" Unload Me
Of course the calling code for the form isn’t in the question, but it can likely be solved there as well.
Unload only affects a
Try adding a reference to the open workbook and then closing it like so:
dim wb as Workbook set wb = Workbooks.Open "pathname" wb.activate ' do whatever with it while it's open wb.Close
If whatever you are doing is not automated, you will need a button on your form that will set the reference to the workbook and close it once the user has completed editing.
If you define the workbooks that you open as a variable – you will be able to close them easily. Keep in mind this does not save the workbook.
Dim DataBook As Workbook Set DataBook = Workbooks.open ("pathname") ' Do something useful with the file DataBook.Close
It is not completely clear what you are trying to ask here, but I’ll give it my best in providing you a full answer. If you are having no success with the
Unload Me statement when it comes to closing a user form, try specifying the full form name in VBA. That is:
If you are trying to close the workbook you have opened (via the user form), you can use the
Dim wb as Workbook Set wb = Workbooks.Open(Filename:="C:\example.xls") wb.Activate 'Close workbook wb.Close 'Unload form Unload ExampleForm
More on the use of the Unload statement can be found here:- https://msdn.microsoft.com/en-us/library/aa445829(v=vs.60).aspx
And more on the use of the Workbooks.Close statement can be found here:- https://msdn.microsoft.com/en-us/library/office/ff838613.aspx
I’m not sure what’s causing the behavior you describe (inability to click the “Close” X button in the active Excel window). However your current workflow is:
- User interacts with form to review/access a file
- User clicks a button on the form which unloads the form
- User is then expected to manually close out of the file opened in (1)
A better solution would be to remove the third step, and close the workbook from one of the form’s event-handlers (
UserForm_Terminate). Alternatively you could add this to a
Click event, but that’s not very different than requiring the user to manually close the file.
This could be as simple as:
Private Sub UserForm_Terminate() ' should be called when form Unloads On Error Resume Next Workbooks.Close "filename.xlsx" End Sub
In this manner, the file will be closed any time the user closes or otherwise unloads the userform.
OK I think I found a way around it.
Let’s say I have a workbook1 which has a form called ControlPage with command button that opens up workbook2.
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
So basically because ‘activate’ bit doesn’t seem to work properly when I try to activate workbook 2 straight away, I just activate the first, and then the second one ane after another. Twisted but did the trick for me.