Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Abfrage ob Focus auf UserForm oder Tabellenblatt

Forumthread: Abfrage ob Focus auf UserForm oder Tabellenblatt

Abfrage ob Focus auf UserForm oder Tabellenblatt
15.06.2009 15:44:16
Martin
Hallo liebe Excelianer,
ich komme leider bei einer Focus-Abfrage nicht weiter. Ich habe ein UserForm mit der Eigenschaft "ShowModal = False", damit ich bei geöffnetem UserForm weiterhin direkt auf dem Tabellenblatt arbeiten kann. Wie kann ich per Makro abfragen, ob der Focus gerade auf dem Tabellenblatt oder dem UserForm liegt?
Viele Grüße
Martin
Anzeige

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Abfrage ob Focus auf UserForm oder Tabellenblatt
15.06.2009 16:10:57
Gerd
Hi,
beschreibe, was du eigentlich erreichen willst.
mfg Gerd
AW: Abfrage ob Focus auf UserForm oder Tabellenblatt
15.06.2009 16:26:22
Martin
Hallo Gerd,
ich habe ein Kontextmenü (ShowPopup), das sowohl auf dem UserForm als auch auf dem Tabellenblatt zum Einsatz kommt. Da sich der Aufbau des Kontextmenüs ein wenig mit dem auf dem Tabellenblatt unterscheidet, würde ich in dem Makro zur Darstellung des Kontextmenüs gerne eine Fallunterscheidung einbauen:
Wenn Focus auf Tabellenblatt, dann zeige folgende Controls, sonst zeige folgende Controls.
Siehe: https://www.herber.de/bbs/user/62445.jpg
Viele Grüße
Martin
Anzeige
AW: Abfrage ob Focus auf UserForm oder Tabellenblatt
15.06.2009 16:42:09
Hajo_Zi
Hallo Martin,
mal nur aus Intresse, Wie zeigt man in einer UserForm ein Kontextmenü an und wie wird das ausgelöst?

ShowPopUp oT
15.06.2009 16:46:46
Gerd
oT
AW: ShowPopUp oT
15.06.2009 16:52:23
Hajo_Zi
Halo Gerd,
kann es auch ein wenig mehr sein. Ich hätte nicht gefragt, wenn ich das kenne und bisher verstehe ich nur Bahnhof.
Gruß Hajo
Anzeige
AW: Kontext UserForm
15.06.2009 17:08:41
Hajo_Zi
Halo Martin.
es muß schn Nacht sein, ich stehe immer noch im dunkel.
Ich habe den Code von der verlinkten Seite in eine Userform kopiert und den Aufruf so gemacht wie von Dir beschrieben. Laufzeitfehler. Im zweiten Link kann die Datei wo wohl ein Beispiel drin ist nicht runtergeladen werden.
Gruß Hajo
Anzeige
AW: Kontext UserForm
15.06.2009 17:17:51
Martin
Hallo Hajo,
ich habe Dir die Beispieldatei noch einmal hochgeladen:
https://www.herber.de/bbs/user/62446.xls
Ich hoffe, dass die Sonne jetzt aufgeht?! ;-)
Viele Grüße
Martin
AW: Kontext UserForm
15.06.2009 17:24:58
Hajo_Zi
Halo Martin,
Danke für die Datei, bei mir ist jetrt auch wieder Tag.
Gruß Hajo
Anzeige
AW: Kontext UserForm
15.06.2009 17:51:33
Hajo_Zi
Halo Martin,
doch noch eine Frage. Wiee hast Du das hinbekommen mit dem Bild. Ich habe es so versucht.

With Application.CommandBars("TestMenu").Controls("m_MenuItem1")
.Caption = "buuton 1"
.FaceId = 343
.OnAction = "Makro1"
End With


aber ohne Erfolg.
Gruß Hajo

Anzeige
AW: Kontext UserForm
15.06.2009 18:33:51
Martin
Hallo Hajo,
das geht so:
With CommandBars("TestMenu").Controls.Add(Type:=msoControlButton, Before:=3)
.Style = MsoButtonStyle.msoButtonIconAndCaption
.Caption = "Button 1"
.OnAction = "Makro1"
.BeginGroup = True
.FaceId = 3414
End With
Viele Grüße
Martin
AW: Kontext UserForm
15.06.2009 18:51:03
Hajo_Zi
Hallo martin,
kanst Du nochmal die Datei mit Bildern im Menü hochladen. Irgendwie komme ich nicht klar.
Gruß Hajo
Anzeige
AW: Kontext UserForm
15.06.2009 20:42:15
Hajo_Zi
Halo Martin,
Danke, jetzt müßte ich klar kommen.
Gruß Hajo
Anzeige
AW: Kontext UserForm
15.06.2009 20:54:09
Martin
Hallo Hajo,
falls Du mit dem Rechtsklick auf der Listbox zum Auslösen des Kontextmenüs eine bessere Lösung als ich findest, würde ich mich über eine Antwort sehr freuen. Meine EMail-Adresse lautet: martin.springer["an" in emailsprache]web.de
Viele Grüße
Martin
AW: Abfrage ob Focus auf UserForm oder Tabellenblatt
15.06.2009 16:46:03
Gerd
Hi,
dazu musst du das nicht wissen. Wahrscheinlich wird ja das Kontextmenü mittels
Rechtsklick aufgerufen, oder? Dazu musst du ja ohnehin das Ereignis der Tabelle
oder des entsprechenden Controls der Userform verwenden.
mfg Gerd
Anzeige
AW: Abfrage ob Focus auf UserForm oder Tabellenblatt
15.06.2009 17:12:19
Martin
Hallo Gerd,
das Rechtskick-Ereignis der UserForm und der Tabelle verweisen auf das gleiche Makro. Das Makro will ich nicht kopieren und ändern, sondern (mit Fallunterscheidung) für beide Ereignisse verwenden. Kann den der Fokus nicht einfach abgefragt werden?
Viele Grüße
Martin
AW: Abfrage ob Focus auf UserForm oder Tabellenblatt
15.06.2009 17:52:45
Gerd
Hi,
übergib dem eigentlichen Makro ein Argument:

Sub DeinMakro(WerRiefMichAuf As String)
If WerRiefMichAuf = "UF" Then
MsgBox WerRiefMichAuf
Else
MsgBox WerRiefMichAuf
End If
End Sub


'---------------------------------------------


Sub MakroAusTabelle()
Call DeinMakro("TB")
End Sub


'---------------------------------------------


Sub MakroAusUserform()
Call DeinMakro("UF")
End Sub


mfg Gerd

Anzeige
VIELEN DANK! So klappt es! - Aber noch eine Frage
16.06.2009 11:03:02
Martin
Hallo Gerd,
vielen Dank, damit klappt es super. Bei mir funktioniert das auch ohne dem "Call" vor "DeinMakro("TB")" bzw. "DeinMakro("UF")". Das "Call" ist wohl nicht wirklich notwendig?
Viele Grüße
Martin
AW: VIELEN DANK! So klappt es! - Aber noch eine Frage
16.06.2009 15:04:35
Gerd
Hi,
das Call ist nicht nötig, hilft aber z.B. mit der Suchfunktion Aufrufe von Makros zu finden.
mfg Gerd
Anzeige
Nochmals danke, alles klar!
16.06.2009 19:12:18
Martin
Nochmals danke, alles klar!
;
Anzeige
Anzeige

Infobox / Tutorial

Abfrage des Fokus auf UserForm oder Tabellenblatt in Excel


Schritt-für-Schritt-Anleitung

Um zu überprüfen, ob der Fokus auf einem UserForm oder einem Tabellenblatt liegt, kannst du ein einfaches Makro erstellen. Hier ist eine Schritt-für-Schritt-Anleitung, wie du das umsetzen kannst:

  1. Öffne Excel und gehe zum VBA-Editor (Alt + F11).

  2. Füge ein neues Modul hinzu (rechte Maustaste auf "VBAProject" -> Einfügen -> Modul).

  3. Kopiere und füge den folgenden Code ein:

    Sub DeinMakro(WerRiefMichAuf As String)
       If WerRiefMichAuf = "UF" Then
           MsgBox "Der Fokus liegt auf dem UserForm."
       Else
           MsgBox "Der Fokus liegt auf dem Tabellenblatt."
       End If
    End Sub
    
    Sub MakroAusTabelle()
       Call DeinMakro("TB")
    End Sub
    
    Sub MakroAusUserform()
       Call DeinMakro("UF")
    End Sub
  4. Weise im UserForm und im Tabellenblatt das jeweilige Makro dem Rechtsklick-Ereignis zu.

  5. Teste das Makro, indem du entweder auf das UserForm oder auf das Tabellenblatt klickst.


Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler beim Ausführen des Makros.

    • Lösung: Stelle sicher, dass die richtigen Ereignisse mit den Makros verbunden sind. Prüfe auch, ob das UserForm tatsächlich geöffnet ist, wenn du den Test durchführst.
  • Fehler: Kontextmenü wird nicht angezeigt.

    • Lösung: Überprüfe, ob das Kontextmenü im UserForm korrekt eingerichtet ist. Achte darauf, dass die Controls richtig definiert sind.

Alternative Methoden

Eine alternative Methode, um den Fokus abzufragen, besteht darin, das ActiveWindow-Objekt zu verwenden. Hier ein Beispiel:

Sub CheckFocus()
    If TypeOf ActiveWindow Is Excel.Workbook Then
        MsgBox "Der Fokus liegt auf dem Tabellenblatt."
    ElseIf TypeOf ActiveWindow Is UserForm Then
        MsgBox "Der Fokus liegt auf dem UserForm."
    End If
End Sub

Diese Methode ist besonders nützlich, wenn du den Fokus dynamisch prüfen möchtest, ohne separate Makros zu erstellen.


Praktische Beispiele

Ein praktisches Beispiel für die Anwendung des Fokus-Checks wäre ein Kontextmenü, das unterschiedliche Optionen anzeigt, abhängig davon, ob der Benutzer in einem UserForm oder auf einem Tabellenblatt arbeitet. Hier ist ein Beispielcode:

Sub ShowContextMenu()
    If TypeOf ActiveWindow Is Excel.Workbook Then
        ' Zeige Menü für Tabellenblatt
        CommandBars("TestMenu").ShowPopup
    ElseIf TypeOf ActiveWindow Is UserForm Then
        ' Zeige Menü für UserForm
        CommandBars("UserFormMenu").ShowPopup
    End If
End Sub

Tipps für Profis

  • Verwende die Application.CommandBars-Funktion, um benutzerdefinierte Menüs und Kontextmenüs zu erstellen.
  • Experimentiere mit der ShowModal-Eigenschaft von UserForms, um die Benutzererfahrung zu verbessern.
  • Halte deinen Code modular, um die Wartbarkeit zu erhöhen. Übergebe Argumente an deine Makros, um die Logik klar zu strukturieren.

FAQ: Häufige Fragen

1. Ist das Call-Keyword notwendig? Nein, das Call-Keyword ist nicht zwingend erforderlich, hilft jedoch bei der Übersichtlichkeit und der Suchfunktion für Makros.

2. Wie kann ich ein Kontextmenü im UserForm anzeigen? Du kannst das Kontextmenü mit CommandBars("XYZ").ShowPopup aufrufen, wobei "XYZ" der Name deines Kontextmenüs ist.

3. Welche Excel-Version benötige ich für diese Methoden? Die beschriebenen Methoden sind in Excel 2010 und neueren Versionen anwendbar.

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