Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: VBA Editor per Code schließen

VBA Editor per Code schließen
Captain
Hi,
habe folgenden Code, der auch funktioniert...

If Application.VBE.MainWindow.Visible = True Then
Application.VBE.MainWindow.Visible = False
Else
Application.VBE.MainWindow.Visible = True
End If
aber..der funktioniert NUR, wenn in der Makrosicherheit der Zugriff auf VBA-Projekt das Häkchen gesetzt ist...
Gibt es einen "alternativen" Code, um den VBA-Editor zu schließen?
Hintergrund:
Ich habe einen Dienstplan erstellt. Meine Navigation und Bearbeitung funktioniert per Userforms. Mein VBA-Projekt ist Passwort geschützt. Wenn jemand also im VBA-Editor auf "Stop" klickt, kann derjenige in der Mappe und in den Tabellen herumschmieren - das ist denkbar schlecht und hat schon stattgefunden! Man kann echt niemanden trauen - das ist traurig!
Danke für die Hilfe
Jack
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA Editor per Code schließen
01.06.2010 09:05:15
Rudi
Hallo,
und wozu soll dann der Code gut sein?
Versuch's mal über SendKeys.
Gruß
Rudi
AW: VBA Editor per Code schließen
01.06.2010 11:18:05
Captain
Hi,
habe doch irgendwo in den Tiefen des www. etwas gefunden was funzt:

Private Const WM_CLOSE = &H10
Private Declare Function apiPostMessage _
Lib "user32" Alias "PostMessageA" _
(ByVal hwnd As Long, _
ByVal wMsg As Long, _
ByVal wParam As Long, _
lParam As Any) _
As Long
Private Declare Function apiFindWindow _
Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, _
ByVal lpWindowName As String) _
As Long
Private Declare Function apiIsWindow _
Lib "user32" Alias "IsWindow" _
(ByVal hwnd As Long) _
As Long
Function fCloseVBEWindow() As Boolean
Const VBE_CLASS = "wndclass_desked_gsk"
Dim hwnd As Long
hwnd = apiFindWindow(VBE_CLASS, Application.VBE.MainWindow.Caption)
If hwnd Then
Call apiPostMessage(hwnd, WM_CLOSE, 0, 0&)
fCloseVBEWindow = (apiIsWindow(hwnd)  0)
End If
Application.SendKeys "~"
End Function
Private Sub CommandButton1_Click()
If fCloseVBEWindow Then
MsgBox "VBE closed"
Else
MsgBox "Failed to close VBE"
End If
End Sub
Jack
Anzeige
AW: VBA Editor per Code schließen
01.06.2010 14:48:50
Nepumuk
Hallo,
hier: Application.VBE.MainWindow.Caption greifst du aber auf das VBE-Projekt zu. Und das geht nicht wenn der Zugriff nicht gestattet ist.
Du musst also alle Fenster durchlaufen und schauen ob in der Titelleiste "Microsoft Visual Basic" steht.
Gruß
Nepumuk
;
Anzeige
Anzeige

Infobox / Tutorial

VBA Editor per Code schließen


Schritt-für-Schritt-Anleitung

Um den VBA Editor in Excel per Code zu schließen, kannst du folgenden VBA-Code verwenden. Dieser Code prüft, ob das Fenster sichtbar ist und schließt es gegebenenfalls:

If Application.VBE.MainWindow.Visible = True Then
    Application.VBE.MainWindow.Visible = False
Else
    Application.VBE.MainWindow.Visible = True
End If

Dieser Code funktioniert jedoch nur, wenn in den Makrosicherheitseinstellungen der Zugriff auf das VBA-Projekt erlaubt ist. Wenn du einen Dienstplan Editor entwickelt hast und sicherstellen möchtest, dass niemand unbefugt auf das VBA-Projekt zugreifen kann, ist dies eine wichtige Einschränkung.


Häufige Fehler und Lösungen

  1. Fehler: "Zugriff auf das VBA-Projekt nicht erlaubt"

    • Lösung: Stelle sicher, dass in den Excel-Makrosicherheitseinstellungen das Häkchen bei "Zugriff auf das VBA-Projekt" gesetzt ist.
  2. Fehler: Der Editor schließt nicht

    • Lösung: Verwende den alternativen Code mit SendKeys, um den Editor zu schließen, falls der Zugriff nicht erlaubt ist.

Alternative Methoden

Falls der oben genannte Code nicht funktioniert, kannst du folgende Methode ausprobieren, die auf API-Funktionen basiert:

Private Const WM_CLOSE = &H10
Private Declare Function apiPostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function apiFindWindow Lib "user32" Alias "FindWindowA" _
(ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Function fCloseVBEWindow() As Boolean
    Const VBE_CLASS = "wndclass_desked_gsk"
    Dim hwnd As Long
    hwnd = apiFindWindow(VBE_CLASS, Application.VBE.MainWindow.Caption)
    If hwnd Then
        Call apiPostMessage(hwnd, WM_CLOSE, 0, 0&)
        fCloseVBEWindow = (apiIsWindow(hwnd) <> 0)
    End If
    Application.SendKeys "~"
End Function

Mit dieser Methode kannst du den VBA Editor schließen, selbst wenn der Zugriff auf das Projekt nicht gestattet ist.


Praktische Beispiele

  • Beispiel 1: Wenn du einen Button in einem Userform hast, kannst du den Code zum Schließen des Editors direkt in die Click-Ereignisprozedur des Buttons einfügen.
Private Sub CommandButton1_Click()
    If fCloseVBEWindow Then
        MsgBox "VBE closed"
    Else
        MsgBox "Failed to close VBE"
    End If
End Sub
  • Beispiel 2: In einem Dienstplan Editor könnte es sinnvoll sein, den VBA Editor zu schließen, um die Benutzeroberfläche zu schützen.

Tipps für Profis

  • Verstecke den VBA Editor: Denke daran, dass du den VBA Editor auch verstecken kannst, anstatt ihn nur zu schließen. Dies kann durch das Setzen von Eigenschaften in deinem Excel VBA Projekt erfolgen.
  • Schutz für dein Projekt: Schütze dein VBA-Projekt mit einem Passwort, um unbefugten Zugriff zu verhindern.
  • VBA Editor Download: Wenn dein aktueller VBA Editor veraltet ist, solltest du den neuesten VBA Editor Download in Betracht ziehen, um alle Funktionen optimal nutzen zu können.

FAQ: Häufige Fragen

1. Wie kann ich den VBA Editor öffnen?
Du kannst den VBA Editor öffnen, indem du in Excel die Tastenkombination ALT + F11 drückst.

2. Was kann ich tun, wenn ich den VBA Editor nicht schließen kann?
Stelle sicher, dass du die richtigen Berechtigungen hast und der Sicherheitslevel für Makros richtig eingestellt ist. Alternativ kannst du die API-Methode verwenden, um das Fenster zu schließen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige