View Single Post
  #13   Report Post  
Posted to microsoft.public.excel.programming
Tim Childs[_10_] Tim Childs[_10_] is offline
external usenet poster
 
Posts: 9
Default Error in VB Editor Coding

On 03-Jul-16 4:37 PM, Peter T wrote:
"Tim Childs" wrote in message
On 01-Jul-16 7:01 PM, Peter T wrote:
"Tim Childs" wrote in message
Hi

I have used the code below to close the extra VB windows that end up
being open when using the VBA editor.

Sub CloseVBEWindows()
Dim W As VBIDE.Window

ThisWorkbook.VBProject.VBE.MainWindow.SetFocus
For Each W In Application.VBE.Windows
If W.Type = vbext_wt_CodeWindow Or W.Type = vbext_wt_Designer Then
If Application.VBE.ActiveWindow.Caption < W.Caption Then
W.Close
End If
End If
Next W
End Sub

It works fine on a 64-bit laptop running Windows 10 and Excel 2010.
When I run it on a 64-bit laptop with windows 7 and Excel Professional
Plus I get the error 424 (object required) at the following line:
If W.Type = vbext_wt_CodeWindow Or W.Type = vbext_wt_Designer Then

The extensibility library 5.3 has been set in references.

Can anyone suggest a possible solution, please

That ought to work, I have something similar (and more to collapse all
projects). Curious though why you get that error there and not on the for
each line. If there was anything wrong with the reference you would have
got
a compile error. When it breaks see what W refers to in Locals, alt-v, s

If you want to try Mike's suggestion and declare W as object, also change
the named vbext constants to 0 and 1 respectively (or simply if W.Type <=
1)
to rule out the extensibility reference.

Peter T




Hi Peter

Thanks for the suggestion

I found that on the Acer machine the following code still failed in
runtime with the same error for one VBE window (see below):

Sub A_CloseVBEWindowsTEST()

Dim W As Object
Dim iCounter As Integer

ThisWorkbook.VBProject.VBE.MainWindow.SetFocus


Debug.Print "total No of windows = " & Application.VBE.Windows.Count
iCounter = Application.VBE.Windows.Count

For Each W In Application.VBE.Windows
Debug.Print "W #" & iCounter & " is currently: " & (W.Caption)

iCounter = iCounter - 1
Next W
End Sub

It produced this in the Immediate Window on another machine:

total No of windows = 9
W #9 is currently: Close VBE windows, ex Acer test on Mac TEMP.xlsm -
Sheet1 (Code)
W #8 is currently: mClearVBECodeWindows (Code)
W #7 is currently: Project - VBAProject
W #6 is currently:
W #5 is currently: Properties
W #4 is currently: Object Browser
W #3 is currently: Watches
W #2 is currently: Locals
W #1 is currently: Immediate

I think it is failing on the "blank" window i.e. Window #6 on the Acer but
am not sure - what is that window - I recognise the others?

Any help welcome


Did you try what I suggested before, look at the errant W in Locals, and the
way I suggested when it breaks after determining it's a module window. That
#6 above be the one that's causiong problems but without knowing could be
some other unrelated window.

Trivial but FWIW ThisWorkbook.VBProject.VBE.MainWindow is the same as
Application.VBE

Peter T



Hi Peter

Thanks for the response. I will try that and thanks for the FWIW tip -
always looking for simplification :)

Best wishes

Tim