Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1888to1892
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
Inhaltsverzeichnis

Response

Response
25.06.2022 18:35:45
Siegfried
Hi zusammen,
von Nepumuk habe ich den folgenden Schnipsel übernommen:

Private Sub Worksheet_SelectionChange(ByVal Target As Excel.Range)
' Varable Bereich Wirksamkeit
Dim RngNeustart As Range
Dim Msg, Style, Response
Msg = "soll dieser Bereich jetzt bereinigt werden ?"    ' Define message.
Style = vbYesNo + vbCritical + vbDefaultButton2    ' Define buttons.
If CallByName(Selection, IIf(Val( _
Application.Version) > 11, "CountLarge", "Count"), VbGet) = 1 Then
' Bereich der Wirksamkeit definieren
Set RngNeustart = Range("Neustart")
' prüfen ob Zelle im Bereich, dann Userform starten
If Not Intersect(Target, RngNeustart) Is Nothing Then
Response = MsgBox(Msg, Style)
If Response = vbYes Then    ' User chose Yes.
' Perform some action.
Else     ' User chose No.
' Perform some action.
Range("E_1").ClearContents
Range("E_2").ClearContents
Range("E_3").ClearContents
End If
End If
Set RngNeustart = Nothing
End If
End Sub
Mir geht es um den Teil Style.
Ich möchte nicht nur Yes zur Auswahl, sondern eine 2 Yes Möglichkeit,
bei der 2. Möglichkeit will ich einen Tabellenbereich kopieren und an eine andere Stelle einfügen
Wie kann ich das erreichen?
Gruß
Siegfried

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Response
25.06.2022 19:54:50
Siegfried
Hi Ralph,
Deine Antwort hatte ich schon bei der Hilfe gefunden, und dabei nichts für mein Anliegen gefunden.
Auch die Antwort von Oberschlumpf auf meine Anfrage entspricht genau den Hinweisen in der Hilfe.
Den Hinweis von Ina (aus 2008, nämlich stattdessen eine Userform zu basteln), hatte ich schon im Hinterkopf, aber ich hatte die Hoffnung, den (angepassten) Code von Nepumuk erweitern zu können.
Schade, aber Danke und Gruß
Siegfried
Anzeige
AW: Response
26.06.2022 09:00:11
ralf_b
Naja, mir war schon klar das es nicht einfach so geht. Außer natürlich mit Api -funktionen quasi Hardcore in den Eingeweiden von Windows herumzubasteln.
Die meisten VBA-ler haben davon keinen Plan. Und das ist auch gut so. Je mehr Schalter man zur Verfügung hat um dran rumzuspielen, desto mehr Fehler macht man.
Ich rate zur eigenen Userform. Ist überschaubarer. Für die Einarbeitung in Nepumuks Code wünscht ich viel Erfolg. Dazu bedarf es aber m.E. schon spezieller Programmierkenntnisse.
AW: Response
25.06.2022 20:10:57
Nepumuk
Hallo Siegfried,
den Text in MsgBox-Buttons änderst du so:

Option Explicit
Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function SetTimer Lib "user32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal nIDEvent As LongPtr, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As LongPtr) As LongPtr
Private Declare PtrSafe Function KillTimer Lib "user32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal nIDEvent As LongPtr) As Long
Private Declare PtrSafe Function MessageBoxA Lib "user32.dll" ( _
ByVal hwnd As LongPtr, _
ByVal lpText As String, _
ByVal lpCaption As String, _
ByVal wType As Long) As Long
Private Declare PtrSafe Function SendDlgItemMessageA Lib "user32.dll" ( _
ByVal hDlg As LongPtr, _
ByVal nIDDlgItem As Long, _
ByVal wMsg As Long, _
ByVal wParam As LongPtr, _
ByVal lParam As String) As LongPtr
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 LongPtr
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 enmResult As VbMsgBoxResult
lstrButtonCaption1 = strButtonText1
lstrButtonCaption2 = strButtonText2
lstrButtonCaption3 = strButtonText3
lstrBoxTitel = strTitle
Call SetTimer(Application.hwnd, TIMER_ID, TIMER_ELAPSE, AddressOf SetButtonText)
If lstrButtonCaption2 = "" And lstrButtonCaption3 = "" Then
enmResult = MessageBoxA(llngHwnd, strText, strTitle, vbOKOnly Or enmStyle)
ElseIf lstrButtonCaption2  "" And lstrButtonCaption3 = "" Then
enmResult = MessageBoxA(llngHwnd, strText, strTitle, vbYesNo Or enmStyle)
Else
enmResult = MessageBoxA(llngHwnd, strText, strTitle, vbAbortRetryIgnore Or enmStyle)
End If
If enmResult = vbOK Or enmResult = vbYes Or enmResult = vbAbort Then
MsgBoxPlus = 1
ElseIf enmResult = vbNo Or enmResult = vbRetry Then
MsgBoxPlus = 2
Else
MsgBoxPlus = 3
End If
End Function
Private Sub SetButtonText()
Dim lngptrBoxHwnd As LongPtr
Call KillTimer(Application.hwnd, TIMER_ID)
lngptrBoxHwnd = FindWindowA(GC_CLASSNAMEMSDIALOGS, lstrBoxTitel)
If lstrButtonCaption2 = "" And lstrButtonCaption3 = "" Then
Call SendDlgItemMessageA(lngptrBoxHwnd, vbCancel, WM_SETTEXT, 0&, lstrButtonCaption1)
ElseIf lstrButtonCaption2  "" And lstrButtonCaption3 = "" Then
Call SendDlgItemMessageA(lngptrBoxHwnd, vbYes, WM_SETTEXT, 0&, lstrButtonCaption1)
Call SendDlgItemMessageA(lngptrBoxHwnd, vbNo, WM_SETTEXT, 0&, lstrButtonCaption2)
Else
Call SendDlgItemMessageA(lngptrBoxHwnd, vbAbort, WM_SETTEXT, 0&, lstrButtonCaption1)
Call SendDlgItemMessageA(lngptrBoxHwnd, vbRetry, WM_SETTEXT, 0&, lstrButtonCaption2)
Call SendDlgItemMessageA(lngptrBoxHwnd, vbIgnore, WM_SETTEXT, 0&, lstrButtonCaption3)
End If
End Sub
Public Sub Aufruf()
Select Case MsgBoxPlus(strText:="Darstellung der Schmerzeinschätzung?" & vbLf & _
"Über (NRS) oder Über (BESD)", strTitle:="Titel", _
strButtonText1:="NRS", strButtonText2:="BESD", _
strButtonText3:="Abbrechen", enmStyle:=vbExclamation)
Case 1
MsgBox "Button 1"
Case 2
MsgBox "Button 2"
Case 3
MsgBox "Button 3"
End Select
End Sub
Gruß
Nepumuk
Anzeige
AW: Response
25.06.2022 22:13:39
Siegfried
Hi Nepumuk,
Deinen Code muß ich noch durcharbeiten.
Schon mal vielen Dank
Gruß
Siegfried
die Geschichte von...
26.06.2022 02:12:34
Oberschlumpf
...Kanonen und Spatzen, wer kennt die?
Hallo alle,
ja, ok, es scheint wohl doch möglich zu sein, eine MsgBox mit frei formulierbaren Buttontexten zu erstellen.
Aber mal ehrlich, per Userform eine MsgBox "nachzubauen", ist doch viel weniger Aufwand, oder?
Klar, DAS war nich die Frage!
Ok, jeder so, wie er mag.
Ciao
Thorsten
AW: Response
26.06.2022 11:13:41
volti
Hallo Siegfried, hallo Mitstreiter
hier noch 'ne Variante zum Anschauen.
https://www.clever-excel-forum.de/Thread-Msgbox-mit-vier-Button-und-eigenem-Icon
PS. Im Prinzip kann man es mit der internen Excel-Msgbox machen, mit der API Funktion MessageBoxA (wie bei Nepumuk) oder mit der API-Funktion MessageBoxIndirectA.
Ganz nach Belieben.
Gruß
Karl-Heinz
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige