Как закрыть windows в VBA Editor с кодом VBA - PullRequest
0 голосов
/ 06 апреля 2020

У меня есть файл excel, и мне бы хотелось, чтобы, если пользователь go внутри VBA Editor, он мог его видеть, но без открытого внутри него windows (по умолчанию)

Я использовал код ниже, но когда я запускаю макрос, ничего не происходит, и когда я go в VBA Editor, я продолжаю видеть, что открыл windows ... Я не понимаю, почему ...

Заранее спасибо !!!

Sub cc()

Dim wk, CodeWindow

For Each wk In Application.Workbooks
    If Not wk.Name = ThisWorkbook.Name Then
       For Each CodeWindow In wk.VBProject.VBE.Windows
           If CodeWindow.Visible = True Then CodeWindow.Visible = False
       Next CodeWindow
    End If
Next wk

End Sub 

Заранее большое спасибо !!

Ответы [ 2 ]

2 голосов
/ 06 апреля 2020

Это, я думаю, функция, которая необходима для автоматического закрытия всех открытых VBE Windows:

Public Sub CloseAllVBEWindows()
Dim wk As Workbook
Dim CodeWindow As Variant

'If VBE is closed the user shall allow it to open first
If Application.VBE.MainWindow.Visible = False Then
    If MsgBox("VBE is still closed!" & vbCrLf & "The operation requires VBE to be open during its process. Would you like to open it?", vbInformation + vbYesNo) = vbYes Then
        Application.VBE.MainWindow.Visible = True
    Else
        Exit Sub
    End If
End If

'Then it will close all the windows
'Except the Default VBE Windows (Immediate Windows, Locals Windows ...)
For Each wk In Application.Workbooks
    If wk.Name = ThisWorkbook.Name Then
       For Each CodeWindow In wk.VBProject.VBE.Windows
           If CodeWindow.Visible = True And CodeWindow.Type = 0 Then CodeWindow.Visible = False
       Next CodeWindow
    End If
Next wk

End Sub

Вам необходимо понимать, что в VBE перечислены даже все панели, поэтому вы должны закройте только CodeWindow.Type = 0 (Visual Basi c Script Windows).

И это решит вашу проблему! Просто дайте мне знать

Обновление: Если VBE закрыт, он сначала откроет VBE и перейдет к закрытию

1 голос
/ 06 апреля 2020

Большое спасибо, большое за помощь !!

Макрос, собранный так, для меня это хорошо !!

Public Sub CloseAllVBEWindows()

Dim wk As Workbook
Dim CodeWindow As Variant

Application.VBE.MainWindow.Visible = True

For Each wk In Application.Workbooks
    If wk.Name = ThisWorkbook.Name Then
       For Each CodeWindow In wk.VBProject.VBE.Windows
           If CodeWindow.Visible = True Then CodeWindow.Visible = False
       Next CodeWindow
    End If
Next wk

End Sub

Fantasti c !!

Моя проблема заключалась в том, что в качестве опции Excel у меня нет установленного флага в последней строке прикрепленного изображения: «доверительный доступ к объектной модели проекта VBA» enter image description here

Есть ли способ, с помощью кода VBA, автоматически пометить c эту опцию Excel?

Еще раз большое спасибо !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...