Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1144to1148
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
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ß

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: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
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
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

73 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige