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

msg box mit 3 auswahlmöglichkeiten

Forumthread: msg box mit 3 auswahlmöglichkeiten

msg box mit 3 auswahlmöglichkeiten
09.07.2014 12:24:03
Spenski

hi , wie schreibe ich eine msgbox mit 3 auswahlmöglichkeiten?
Auswahl1 : Schichtübergreifend
Auswahl2 : Überschreiben
Auswahl3 : Abbrechen
Also:
wenn ich Auswahl1 auswähle dann starte Makro1
wenn ich Auswahl2 auswähle dann starte Makro2
bei Auswahl2 Makro abbrechen
danke im vorraus
christian

Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: msg box mit 3 auswahlmöglichkeiten
09.07.2014 12:32:06
Hajo_Zi
Hallo Christian,
benutze eine Userform oder Du hast Version 97.

AW: msg box mit 3 auswahlmöglichkeiten
09.07.2014 12:37:30
Spenski
ne hab 2010 ... ok mit einer extra UF würds auch gehen... ich probier es mal
danke

nur interessehalber....
09.07.2014 12:47:04
Spenski
...gibts diese funktion bei der 2010 version nicht??
gruss

Anzeige
AW: nur interessehalber....
09.07.2014 13:18:40
Hajo_Zi
ja die wurde abgeschafft.
Gruß Hajo

AW: nur interessehalber....
09.07.2014 13:42:29
Hajo_Zi
ich habe mal mein Archiv durchsucht. Keine Ahnung bis zu welcher Version das geht.
Option Explicit
Sub Kontrollkaestchen2()
Assistant.On = True
With Assistant.NewBalloon
.Heading = "Kontrollkästchen anklicken"
.Text = "Spiel mit den Kästchen: " & Chr(10)
.Icon = msoIconTip
' Kontrollkästchen
.CheckBoxes(1).Text = "Box 1"
.CheckBoxes(2).Text = "Box 2"
.CheckBoxes(3).Text = "Box 3"
If .Show = msoBalloonButtonOK Then
If .CheckBoxes(1).Checked And Not .CheckBoxes(2).Checked _
And Not .CheckBoxes(3).Checked Then
MsgBox "Du hast Box 1 angeklickt"
ElseIf .CheckBoxes(1).Checked And .CheckBoxes(2). _
Checked Then
MsgBox "Du hast Box 1 und 2 angeklickt"
ElseIf .CheckBoxes(1).Checked And .CheckBoxes(3). _
Checked Then
MsgBox "Du hast Box 1 und 3 angeklickt"
ElseIf .CheckBoxes(2).Checked And .CheckBoxes(3). _
Checked Then
MsgBox "Du hast Box 2 und 3 angeklickt"
ElseIf Not .CheckBoxes(1).Checked And Not _
.CheckBoxes(2).Checked _
And .CheckBoxes(3).Checked Then
MsgBox "Du hast Box 3 angeklickt"
ElseIf .CheckBoxes(2).Checked Then
MsgBox "Du hast Box 2 angeklickt"
End If
End If
End With
End Sub
Gruß Hajo

Anzeige
AW: nur interessehalber....
09.07.2014 13:52:55
Nepumuk
Hallo Hajo,
der Assistant wurde mit der Version 2007 abgeschafft.
Gruß
Nepumuk

AW: nur interessehalber....
09.07.2014 14:02:56
Hajo_Zi
Hallo Nepumuk,
Danke für die Information
Gruß Hajo

AW: msg box mit 3 auswahlmöglichkeiten
09.07.2014 12:59:48
Christian
Hallo Christian,
als Ansatz:

MsgBox("Welche Auswahl?" & Chr(10) _
& "Ja      = Schichtübergreifend" & Chr(10) _
& "Nein = Überschreiben", _
vbQuestion + vbYesNoCancel, "Auswahl treffen")

und über Select Case die Makros zuweisen.
MfG Christian

Anzeige
AW: msg box mit 3 auswahlmöglichkeiten
09.07.2014 13:18:48
Spenski
k danke ...nicht ganz das was ich suche aber ich denke so wirds auch gehen
gruss

AW: msg box mit 3 auswahlmöglichkeiten
09.07.2014 14:04:54
Nepumuk
Hallo,
das geht schon. Beispiel:
Option Explicit

Private Declare Function FindWindowA Lib "user32.dll" ( _
    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 MessageBoxA Lib "user32.dll" ( _
    ByVal Hwnd As Long, _
    ByVal lpText As String, _
    ByVal lpCaption As String, _
    ByVal wType As Long) As Long
Private Declare Function SendDlgItemMessageA Lib "user32.dll" ( _
    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 MsgBoxPlus( _
        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 = FindWindowA(GC_CLASSNAMEMSEXCEL, Application.Caption)
    End If
    
    Call SetTimer(llngHwnd, TIMER_ID, TIMER_ELAPSE, AddressOf SetButtonText)
    
    If lstrButtonCaption2 = "" And lstrButtonCaption3 = "" Then
        lngResult = MessageBoxA(llngHwnd, strText, strTitle, vbOKOnly Or enmStyle)
    ElseIf lstrButtonCaption2 <> "" And lstrButtonCaption3 = "" Then
        lngResult = MessageBoxA(llngHwnd, strText, strTitle, vbYesNo Or enmStyle)
    Else
        lngResult = MessageBoxA(llngHwnd, strText, strTitle, vbAbortRetryIgnore Or enmStyle)
    End If
    
    If lngResult = 1 Or lngResult = 3 Or lngResult = 6 Then
        MsgBoxPlus = 1
    ElseIf lngResult = 4 Or lngResult = 7 Then
        MsgBoxPlus = 2
    Else
        MsgBoxPlus = 3
    End If
    
End Function

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

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

Die Beschränkung liegt in den Buttons, denn du kannst keinen langen Text unterbringen. Natürlich könnte ich per API-Funktion diese verbreitern und entsprechend verschieben, ist mir aber zu viel Aufwand, denn das selbe mit einem Userform benötigt nur einen Bruchteil des Codes.
Gruß
Nepumuk

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Message Box mit 3 Auswahlmöglichkeiten erstellen


Schritt-für-Schritt-Anleitung

Um eine VBA Message Box mit Auswahlmöglichkeiten zu erstellen, kannst du folgendes Vorgehen nutzen:

  1. Öffne Excel und gehe zu den Entwicklertools. Wenn die Entwicklertools nicht sichtbar sind, aktiviere sie in den Excel-Optionen.
  2. Klicke auf "Visual Basic", um den VBA-Editor zu öffnen.
  3. Füge ein neues Modul hinzu, indem du mit der rechten Maustaste auf "VBAProject" klickst und „Modul einfügen“ wählst.
  4. Kopiere folgenden Code in das Modul:
Sub MsgBoxMitAuswahl()
    Dim Antwort As VbMsgBoxResult
    Antwort = MsgBox("Welche Auswahl treffen Sie?" & vbCrLf & _
                     "1 = Schichtübergreifend" & vbCrLf & _
                     "2 = Überschreiben" & vbCrLf & _
                     "3 = Abbrechen", vbQuestion + vbYesNoCancel, "Auswahlmöglichkeiten")

    Select Case Antwort
        Case vbYes
            Call Makro1
        Case vbNo
            Call Makro2
        Case vbCancel
            ' Makro abbrechen
    End Select
End Sub

Sub Makro1()
    MsgBox "Makro 1 wurde gestartet."
End Sub

Sub Makro2()
    MsgBox "Makro 2 wurde gestartet."
End Sub
  1. Speichere das Modul und führe die MsgBoxMitAuswahl-Subroutine aus, um die Message Box anzuzeigen.

Häufige Fehler und Lösungen

  • Fehler: Die Message Box zeigt nicht die gewünschten Optionen an.

    • Lösung: Stelle sicher, dass die Texte in der MsgBox-Funktion korrekt sind. Überprüfe auch die verwendeten Konstanten wie vbYes, vbNo und vbCancel.
  • Fehler: Die Subroutinen Makro1 und Makro2 werden nicht aufgerufen.

    • Lösung: Überprüfe, ob die Namen der Makros korrekt sind und dass sie im gleichen Modul oder verfügbar sind.

Alternative Methoden

Wenn dir die Standard-Message Box nicht ausreicht, kannst du eine Userform erstellen, um mehr Anpassungsmöglichkeiten zu haben:

  1. Erstelle eine Userform im VBA-Editor.
  2. Füge drei Schaltflächen hinzu, um die Auswahlmöglichkeiten darzustellen.
  3. Programmieren die Schaltflächen so, dass sie die entsprechenden Makros aufrufen.

Diese Methode ist besonders nützlich, wenn du komplexere Auswahlmöglichkeiten in Excel benötigst.


Praktische Beispiele

Hier findest du ein Beispiel, wie du die vba msgbox mit auswahl effektiv nutzen kannst:

Sub BeispielMitMsgBox()
    Dim Auswahl As VbMsgBoxResult
    Auswahl = MsgBox("Wählen Sie eine Aktion:" & vbCrLf & _
                     "Ja: Schichtübergreifend" & vbCrLf & _
                     "Nein: Überschreiben" & vbCrLf & _
                     "Abbrechen: Vorgang stoppen", vbQuestion + vbYesNoCancel, "Aktion wählen")

    Select Case Auswahl
        Case vbYes
            MsgBox "Du hast Schichtübergreifend gewählt."
        Case vbNo
            MsgBox "Du hast Überschreiben gewählt."
        Case vbCancel
            MsgBox "Vorgang abgebrochen."
    End Select
End Sub

Tipps für Profis

  • Nutze benutzerdefinierte VBA Message Boxen mit API-Funktionen, um mehr Kontrolle über das Design und die Funktionalität zu erhalten.
  • Experimentiere mit der Userform-Methode, um eine ansprechendere Benutzeroberfläche zu gestalten.
  • Achte darauf, die Excel-Version zu berücksichtigen; einige Funktionen können in älteren Versionen eingeschränkt sein.

FAQ: Häufige Fragen

1. Wie viele Auswahlmöglichkeiten kann ich in einer MsgBox haben?
Standardmäßig kannst du bis zu drei Auswahlmöglichkeiten haben (Ja, Nein, Abbrechen). Für mehr Optionen solltest du eine Userform verwenden.

2. Funktioniert dies in Excel 2010?
Ja, die beschriebenen Methoden funktionieren in Excel 2010 und neueren Versionen. Achte darauf, dass du die richtigen VBA-Funktionen verwendest.

3. Welche Version von Excel benötigt man für erweiterte MsgBox-Funktionen?
Die erweiterten Funktionen, wie z.B. die Verwendung von API-Aufrufen, können je nach Komplexität unterschiedliche Excel-Versionen erfordern. In der Regel funktionieren die meisten grundlegenden Funktionen in Excel 2007 und höher.

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