Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1000to1004
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
Eigenes Userform
08.08.2008 19:51:20
Peter
Hallo Excel-Fans,
ich komme bisher nur mit einer JA/NEIN-Abfrage zurecht, wie nachfolgend dargestellt:

Sub Abfrage()
Prompt = "Erklärung"
DialogArt = vbYesNo + vbCritical + vbDefaultButton2
Title = "EntwederOder"
Antwort = MsgBox(Prompt, DialogArt, Title)
If Antwort = vbYes Then
MsgBox "Entweder"
End If
If Antwort = vbNo Then
MsgBox "Oder"
End If
End Sub


Ich möchte die Buttons aber nicht mit Ja und Nein beschriften, sondern mit eigenen Texten.
Für Euch Experten ist das bestimmt ganz schnell erledigt.
Wer kann mir ein entsprechendes Beispiel zeigen?
Danke für jede Meldung.
Gruß,
Peter

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Eigenes Userform
08.08.2008 19:52:00
Hajo_Zi
Hallo Peter,
das geht nur über UserForm, wie es auch schon im Betreff steht. Das was Du geschrieben hast ist eine MsgBox.

AW: Eigenes Userform
08.08.2008 23:11:00
Peter
Hallo Matthias,
danke für dein Beispiel. Habe sowas noch nie gemacht, aber nach 2 Std. Ausprobieren habe ich mich durchgebissen. Klappt jetzt.
Gruß Peter.

AW: Eigenes Userform
08.08.2008 21:13:00
Nepumuk
Hallo Peter,
ein Beispiel. Bleibt nur die Frage, ob der Aufwand zu rechtfertigen ist.
' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

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 llngXL_hWnd As Long

Private Function MsgBoxPlus( _
        ByVal strText As String, _
        ByVal strTitle As String, _
        ByVal strButtobText1 As String, _
        Optional ByVal strButtobText2 As String, _
        Optional ByVal strButtobText3 As String, _
        Optional ByVal enmStyle As VbMsgBoxStyle) As Long

    
    Dim lngResult As Long
    
    lstrButtonCaption1 = strButtobText1
    lstrButtonCaption2 = strButtobText2
    lstrButtonCaption3 = strButtobText3
    lstrBoxTitel = strTitle
    
    llngXL_hWnd = FindWindowA(GC_CLASSNAMEMSEXCEL, Application.Caption)
    
    Call SetTimer(llngXL_hWnd, TIMER_ID, TIMER_ELAPSE, AddressOf MsgBoxPlus_TimerEvent)
    
    If strButtobText2 = "" And strButtobText3 = "" Then
        lngResult = MessageBoxA(llngXL_hWnd, strText, strTitle, enmStyle Or vbOKOnly)
    ElseIf strButtobText2 <> "" And strButtobText3 = "" Then
        lngResult = MessageBoxA(llngXL_hWnd, strText, strTitle, enmStyle Or vbYesNo)
    Else
        lngResult = MessageBoxA(llngXL_hWnd, strText, strTitle, enmStyle Or vbAbortRetryIgnore)
    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 MsgBoxPlus_TimerEvent(ByVal hWnd As Long)
    Dim lngBox_hWnd As Long
    
    Call KillTimer(llngXL_hWnd, 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("Erklärung", "EntwederOder", "Entweder", "Oder", , vbCritical Or vbDefaultButton2)
        Case 1
            MsgBox "Entweder"
        Case 2
            MsgBox "Oder"
        Case 3
            MsgBox "?"
    End Select
End Sub

Gruß
Nepumuk

Anzeige
AW: Eigenes Userform
08.08.2008 22:54:00
Uduuh
Hallo,
das sind ja wohl eher Interkontinentalraketen auf Mücken als Kanonen auf Spatzen. ;-)
Gruß aus’m Pott
Udo

AW: Eigenes Userform
08.08.2008 23:14:58
Peter
Hallo Nepumuk,
das hat mich erschlagen. Wahrscheinlich funktioniert es, aber mit meinen bescheidenen VBA-Kenntnissen trau' ich mich da nicht dran.
Gruß,
Peter

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige