Live-Forum - Die aktuellen Beiträge
Datum
Titel
16.10.2025 17:40:39
16.10.2025 17:25:38
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: MsgBox mit drei Antwortmöglickeiten

MsgBox mit drei Antwortmöglickeiten
!Micha!

Hallo!
Kann mir jemand mit einer Messagebox bzw. dem Code dafür helfen:
Wenn man auf einen bestimmte Zelle klickt, soll sich eine Messagebox öffnen mit drei  _
verschiedenen Anklickoptionen: "yes" , "no" und in "work"
und je nach klick soll dieser Text dann in der Zelle stehen.
Habe noch nie einen Messagebox gesehen mit drei Möglichkeiten, hoffe das geht überhaupt.
Dake im Voraus.
gruß

Anzeige
AW: MsgBox mit drei Antwortmöglickeiten
21.03.2010 11:34:14
ransi
Hallo
3 Möglichkeiten geht.
Ohne Klimmzüge allerdings nur 2 Möglichkeiten:
VbYesNoCancel 3 Schaltflächen Ja, Nein und Abbrechen anzeigen.
VbAbortRetryIgnore 2 Schaltflächen Abbruch, Wiederholen und Ignorieren anzeigen.
Auswerten kann man das dann so:
Option Explicit



Public Sub test()
Dim a As Integer
Dim sText As String
a = MsgBox("Mach was", vbYesNoCancel)
Select Case a
    Case 6: sText = "Ja geclickt"
    Case 7: sText = "Nein geclickt"
    Case 2: sText = "Abbrechen gecklickt"
End Select
MsgBox sText
End Sub


ransi
Anzeige
AW: MsgBox mit drei Antwortmöglickeiten
21.03.2010 11:42:51
!Micha!

Hallo ransi!
Danke für die schnelle Antwort. Aufgrund meiner VBA-Unerfahrenheit komme ich damit noch nicht  _
ganz klar:
wie kann man die Msg Box einer Spalte zuweisen, z.B. man sagt alle Zellen in Spalte D sollen  _
betroffen sein.
gruß micha

AW: MsgBox mit drei Antwortmöglickeiten
21.03.2010 12:00:42
Reinhard
Hallo Michi,
in Modul "Tabelle1"

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Set Target = Intersect(Target, Range("D1:D800"))
If Not Target Is Nothing Then UserForm1.Show 0
End Sub
in Modul Userform1
Private Sub CommandButton1_Click()
ActiveCell.Value = CommandButton1.Caption
Unload UserForm1
End Sub
Private Sub CommandButton2_Click()
ActiveCell.Value = CommandButton2.Caption
Unload UserForm1
End Sub
Private Sub CommandButton3_Click()
ActiveCell.Value = CommandButton3.Caption
Unload UserForm1
End Sub

Gruß
Reinhard
Anzeige
AW: MsgBox mit drei Antwortmöglickeiten
21.03.2010 12:12:33
!Micha!
Danke reinhard.
wie krieg ich den jetzt diesen Userform button weg und wie kann man denn die überschrift Messagebox und den Inhalt der Buttons ändern?
danke
AW: MsgBox mit drei Antwortmöglickeiten
21.03.2010 12:41:51
Reinhard
Hallo Micha,
Ansicht--Symbolleisten--Steuerelementtoolbox, Klicke auf das erste Symbol=Entwurfsmodus Ein.
Nun Rechtsklick auf den Button, Ausschneiden.
Alt+F11, Klicke links auf Userform1, wenn du sie siehst, drücke F4,
Caption ist die Eigenschaft die du ändern mußt, je nachdem welches Objekt du anklickst kannst du dessen Eigenschaften ändern.
Danach Eigenschaftsfenster über dessen Schließkreuz schließen.
Gruß
Reinhard
Anzeige
AW: MsgBox mit drei Antwortmöglickeiten
21.03.2010 12:51:19
!Micha!
a ok, alles klar!
das einzige was noch fehlt, ich möchte dass yes no und in work in der geklickten Zelle der Spalte D steht!
kannst du das noch ändern?
gruß micha
AW: MsgBox mit drei Antwortmöglickeiten
21.03.2010 11:37:37
Steffen
Hallo Micha,
warum nutzt du nicht ein Userform?
https://www.herber.de/bbs/user/68684.xls
Grüße
Steffen
Anzeige
AW: MsgBox mit drei Antwortmöglickeiten
21.03.2010 11:49:46
!Micha!
Super danke! wie kann ich angeben, dass diese Userform für eine komplette Spalte gilt, oder zumindest bis Zeile 800.
gruß micha
AW: MsgBox mit drei Antwortmöglickeiten
21.03.2010 12:38:29
!Micha!
wie lässt sich denn die Spalte ändern?
habe zwar deinen Hinweis gelesen, schaffe es aber dennoch nicht.
momentan wärs cool wenn dass ganze für die Spalte D funktioniert und zwar ab der 8ten zeile bis so ca. 800.
danke
gruß micha
Anzeige
AW: so..
21.03.2010 13:04:58
!Micha!

Super danke!
jetzt habe ich noch eine andere Frage: Kann man sich eigentlich mittels Makro oder Formel  _
irgendwie auf die Hauptzeile einer Gruppierung beziehen?
Das man sagt die Formel oder das Makro für die Hauptzeile soll für alle Unterzeilen gelten und  _
erkennen wann eine neue Hauptzeile kommt. In der das ganze wieder von vorne los geht.
Als Beispiel in meinem Fall: in den unterzeilen steht immer yes no in work und ich möchte in  _
der Hauptzeile auch yes no in work, aber mit bestimmten Regeln. z.B. wenn einmal in work aber sonst yes drinsteht, soll er in work. reinschreiben. Als Priorität absteigend: in work- no- yes
ich weis dass könnte evtl. ganz schön kompliziert sein, deswegen frage ich auch nur mal  _
vorsichtig an.
gruß micha

Anzeige
AW: MsgBox mit drei Antwortmöglickeiten
21.03.2010 11:37:49
Dirk
Hallo!
Wenn Du eine message box verwendest kannst Du nur vorgegebene Beschriftungen verwenden. Falls Du da was eigenes brauchst, musst Du Dir dazu eine Userform erstellen.
Gruss
Dirk aus Dubai
Anzeige
AW: MsgBox mit drei Antwortmöglickeiten
21.03.2010 13:23:24
Nepumuk
Hallo Dirk,
das ist möglicherweise bei arabischen MsgBoxen so. Wir können bei unseren deutschen MsgBoxen die Beschriftung der Buttons sehr wohl selbst einstellen.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long
Private Declare Function SetTimer Lib "user32.dll" ( _
    ByVal Hwnd As Long, _
    ByVal nIDEvent As Long, _
    ByVal uElapse As Long, _
    ByVal lpTimer As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" ( _
    ByVal Hwnd As Long, _
    ByVal nIDEvent As Long) As Long
Private Declare Function MessageBox Lib "user32.dll" Alias "MessageBoxA" ( _
    ByVal Hwnd As Long, _
    ByVal lpText As String, _
    ByVal lpCaption As String, _
    ByVal wType As Long) As Long
Private Declare Function SendDlgItemMessage Lib "user32.dll" Alias "SendDlgItemMessageA" ( _
    ByVal hDlg As Long, _
    ByVal nIDDlgItem As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    ByVal lParam As String) As Long

Private Const TIMER_ID = 0
Private Const TIMER_ELAPSE = 25
Private Const WM_SETTEXT = &HC
Private Const GC_CLASSNAMEMSEXCEL = "XLMAIN"
Private Const GC_CLASSNAMEMSDIALOGS = "#32770"

Private lstrButtonCaption1 As String
Private lstrButtonCaption2 As String
Private lstrButtonCaption3 As String
Private lstrBoxTitel As String
Private llngHwnd As Long

Private Function MsgBox_Plus( _
        ByVal strText As String, _
        ByVal strTitle As String, _
        ByVal strButtonText1 As String, _
        Optional ByVal strButtonText2 As String, _
        Optional ByVal strButtonText3 As String, _
        Optional ByVal enmStyle As VbMsgBoxStyle) As Long

    
    Dim lngResult As Long
    
    lstrButtonCaption1 = strButtonText1
    lstrButtonCaption2 = strButtonText2
    lstrButtonCaption3 = strButtonText3
    lstrBoxTitel = strTitle
    
    If Val(Application.Version) > 9 Then
        llngHwnd = Application.Hwnd
    Else
        llngHwnd = FindWindow(GC_CLASSNAMEMSEXCEL, Application.Caption)
    End If
    
    Call SetTimer(llngHwnd, TIMER_ID, TIMER_ELAPSE, AddressOf Set_Button_Text)
    
    If lstrButtonCaption2 = "" And lstrButtonCaption3 = "" Then
        lngResult = MessageBox(llngHwnd, strText, strTitle, vbOKOnly Or enmStyle)
    ElseIf lstrButtonCaption2 <> "" And lstrButtonCaption3 = "" Then
        lngResult = MessageBox(llngHwnd, strText, strTitle, vbYesNo Or enmStyle)
    Else
        lngResult = MessageBox(llngHwnd, strText, strTitle, vbAbortRetryIgnore Or enmStyle)
    End If
    
    If lngResult = 1 Or lngResult = 3 Or lngResult = 6 Then
        MsgBox_Plus = 1
    ElseIf lngResult = 4 Or lngResult = 7 Then
        MsgBox_Plus = 2
    Else
        MsgBox_Plus = 3
    End If
    
End Function

Private Sub Set_Button_Text()
    
    Dim lngBox_hWnd As Long
    
    Call KillTimer(llngHwnd, TIMER_ID)
    
    lngBox_hWnd = FindWindow(GC_CLASSNAMEMSDIALOGS, lstrBoxTitel)
    
    If lstrButtonCaption2 = "" And lstrButtonCaption3 = "" Then
        Call SendDlgItemMessage(lngBox_hWnd, vbCancel, WM_SETTEXT, 0&, lstrButtonCaption1)
    ElseIf lstrButtonCaption2 <> "" And lstrButtonCaption3 = "" Then
        Call SendDlgItemMessage(lngBox_hWnd, vbYes, WM_SETTEXT, 0&, lstrButtonCaption1)
        Call SendDlgItemMessage(lngBox_hWnd, vbNo, WM_SETTEXT, 0&, lstrButtonCaption2)
    Else
        Call SendDlgItemMessage(lngBox_hWnd, vbAbort, WM_SETTEXT, 0&, lstrButtonCaption1)
        Call SendDlgItemMessage(lngBox_hWnd, vbRetry, WM_SETTEXT, 0&, lstrButtonCaption2)
        Call SendDlgItemMessage(lngBox_hWnd, vbIgnore, WM_SETTEXT, 0&, lstrButtonCaption3)
    End If
    
End Sub

Public Sub Aufruf()
    
    Select Case MsgBox_Plus(strText:="Ich bin der Text", strTitle:="Titel", _
                strButtonText1:="Hallo", strButtonText2:="Dirk", _
                strButtonText3:="Dubai", enmStyle:=vbInformation)
        Case 1
            MsgBox "Button 1"
        Case 2
            MsgBox "Button 2"
        Case 3
            MsgBox "Button 3"
    End Select
    
End Sub

Gruß
Nepumuk
Anzeige
AW: MsgBox mit drei Antwortmöglickeiten
22.03.2010 10:55:21
Dirk
Respekt!
Da hab' ich heute wieder was gelernt :-)
Danke fuer das Beispiel, werde das mal in Zukunft verwenden.
Gruss aus Dubai bei z.Z. 27 Grad Celsius
Dirk aus Dubai
AW: MsgBox mit drei Antwortmöglickeiten
21.03.2010 12:02:35
Gerd

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Hallo Micha!
If Not Intersect(Target.Cells(1), Range("A2:A200")) Is Nothing Then
Application.EnableEvents = False
Abfrage.Show
Application.EnableEvents = True
End If
End Sub
Gruß Gerd
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

MsgBox mit drei Auswahlmöglichkeiten in Excel VBA


Schritt-für-Schritt-Anleitung

Um eine VBA MsgBox mit Auswahl zu erstellen, befolge diese Schritte:

  1. Öffne Excel und drücke Alt + F11, um den VBA-Editor zu öffnen.

  2. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf „VBAProject (dein Dokument)“ klickst und „Einfügen“ > „Modul“ wählst.

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

    Public Sub MsgBoxMitDreiOptionen()
       Dim a As Integer
       a = MsgBox("Wähle eine Option:", vbYesNoCancel, "Auswahl")
       Select Case a
           Case vbYes
               ActiveCell.Value = "yes"
           Case vbNo
               ActiveCell.Value = "no"
           Case vbCancel
               ActiveCell.Value = "work"
       End Select
    End Sub
  4. Um die MsgBox bei einem Klick auf eine Zelle in Spalte D zu aktivieren, füge diesen Code in das Tabellenblatt-Modul ein:

    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
       If Not Intersect(Target, Range("D1:D800")) Is Nothing Then
           MsgBoxMitDreiOptionen
       End If
    End Sub
  5. Schließe den Editor und teste die Funktion, indem du auf eine Zelle in Spalte D klickst.


Häufige Fehler und Lösungen

  • Fehler: Die MsgBox öffnet sich nicht.
    Lösung: Stelle sicher, dass der Worksheet_SelectionChange-Code im richtigen Modul (Tabellenblatt) eingefügt wurde.

  • Fehler: Die Zelle wird nicht aktualisiert.
    Lösung: Überprüfe, ob das Ziel wirklich in Spalte D liegt. Der Code funktioniert nur für den Bereich D1:D800.


Alternative Methoden

Wenn du benutzerdefinierte Schaltflächen und Beschriftungen in deiner MsgBox verwenden möchtest, erstelle ein UserForm anstelle einer einfachen MsgBox:

  1. Füge ein UserForm hinzu und platziere drei Schaltflächen (Button1, Button2, Button3) darauf.

  2. Setze den Caption-Text für die Schaltflächen auf "yes", "no" und "work".

  3. Verwende den folgenden Code im UserForm:

    Private Sub CommandButton1_Click()
       ActiveCell.Value = "yes"
       Unload Me
    End Sub
    
    Private Sub CommandButton2_Click()
       ActiveCell.Value = "no"
       Unload Me
    End Sub
    
    Private Sub CommandButton3_Click()
       ActiveCell.Value = "work"
       Unload Me
    End Sub
  4. Rufe das UserForm im Worksheet_SelectionChange-Ereignis auf.


Praktische Beispiele

Hier ein Beispiel, wie die MsgBox in einem realen Szenario verwendet werden kann:

  • Szenario: Du hast eine Liste von Aufgaben in Spalte D. Wenn du eine Zelle auswählst, kannst du den Status der Aufgabe (ja, nein, in Arbeit) festlegen.

  • Codebeispiel für UserForm (mit eigenen Buttons):

    Private Sub UserForm_Initialize()
       CommandButton1.Caption = "Ja"
       CommandButton2.Caption = "Nein"
       CommandButton3.Caption = "In Arbeit"
    End Sub

Tipps für Profis

  • Du kannst die MsgBox-Texte anpassen, um spezifischere Anweisungen zu geben.
  • Nutze Application.EnableEvents = False, um unerwünschte Ereignisse während der Ausführung deines Codes zu vermeiden.
  • Experimentiere mit verschiedenen vbMsgBoxStyle-Optionen, um die Darstellung deiner MsgBox zu ändern.

FAQ: Häufige Fragen

1. Kann ich die Schaltflächen in der MsgBox selbst beschriften?
Ja, du kannst die Schaltflächen in einem UserForm selbst beschriften, da die Standard-MsgBox nur vorgegebene Texte hat.

2. Wie kann ich die MsgBox in Access verwenden?
Die Verwendung der MsgBox in Access erfolgt ähnlich, aber du kannst die MsgBox-Funktion direkt in VBA verwenden, um Dialoge zu erstellen.

3. Ist es möglich, die MsgBox nur für bestimmte Zellen zu aktivieren?
Ja, du kannst den Intersect-Befehl verwenden, um die MsgBox nur für bestimmte Zellen oder Bereiche zu aktivieren.

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