Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1188to1192
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

Msg Box, x aktivieren?

Msg Box, x aktivieren?
abu
Hallo zusammen,
habe im Netz einen Code gefunden mit dem ich einfach und schnell eine MsgBox mit drei Schaltflaechen aufrufen kann. Hatte hier schon mal gefragt ob man auch eine 4. Schaltflaeche hinzufuegen kann aber das ging nicht.
Jetzt wuere ich gerne Fragen ob man den Code anpassen kann, so dass das 'x' rechts oben aktiv ist und beim klick das Programm abbricht? Habs schon versucht aber das uebersteigt meine Kenntnisse bei weitem.
Gruss
abu
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

Na ja, 'einfach und schnell', so sieht das...
10.12.2010 11:51:45
Luc:-?
…aber nicht gerade aus, Abu…
Was hast du denn für irre Titel auf den 3 Buttons, dass du das überhpt brauchst? 'Ne MsgBox mit 3 Buttons (der mögl 4. ist für die Hilfe reserviert) bekommt man doch auch ganz einfach bspw mit MsgBox "Hallo! Hallo!", vbYesNoCancel, "Hallo-Box" oder vbAbortRetryIgnore. Wenn ich mehr Buttons u/o eigene Button-Titel u/o Selbstbeantwortung einer Meldung benötige, nehme ich ein gruppiertes Zeichenobjekt (alternativ 'n UForm). Mit dem kannst du (fast) alles veranstalten, was du willst. Allerdings könnte das Pgm für das ZObjekt noch etwas länger ausfallen, dafür ist es dann in beiden Fällen reines VBA.
Gruß Luc :-?
Anzeige
AW: Na ja, 'einfach und schnell', so sieht das...
10.12.2010 12:19:50
abu
Hey Luc,
meine vorherige UserForm will ich aufraeumen. Uberall Buttons und OptionButtons usw.. Jetzt gibts nur eine Leiste mit Buttons. Ein Button kann aber mehrer Aktionen bedeuten davor stelle ich dann immer die Abfrage was er machen will, mit diesem Code. Das hab ich im Modul und brauch fuer jeden Fall nur diesen Code kopieren und anpassen. Sind deine Vorschlaege genauso schnell/einfach?
Public Sub Aufruf1()
Select Case MsgBox_Plus(strText:=".......", strTitle:="Please choose...", _
strButtonText1:="....", strButtonText2:="....", _
strButtonText3:=".....", enmStyle:=vbInformation)
Case 1
Call .....
Case 2
Call ....
Case 3
Call .....
End Select
End Sub
Der dritte Button ist bisher mein Abbruch-Button aber manchmal brauch ich halt drei Abfragen und will zusaetzlich noch die Moeglichkeit des Abbruchs bieten.
Gruss
abu
Anzeige
Na weißte, auf so'ne merkwürdige...
10.12.2010 12:28:20
Luc:-?
…Organisation muss man erst mal kommen, Abu;
wer so etwas macht, sollte schon allein damit klar kommen können, denn üblich ist das nicht gerade. Mit dem, was ich mache, komme ich alleine klar…! ;-)
Viel Spaß! Luc :-?
Wie sieht denn eine "uebliche" Organisation aus..
10.12.2010 12:45:44
abu
... und was moechtest du mir damit sagen? Ich dachte dieses Forum ist genau dafuer da. Das sich hier Menschen mit unterschiedlichem Wissensstand begegnen ist doch klar aber das ist doch kein Grund ueberheblich zu werden.
Danke, dir auch!
Gruss
abu
Das heißt ganz einfach, für jeden VBA-...
10.12.2010 16:10:01
Luc:-?
…Enthusiasten kommt irgendwann der Zeitpunkt, Abu,
an dem seine Arbeiten so komplex geworden sind, dass man damit kein Forum mehr belästigen kann. Von da an muss man sich bei so etwas allein durchbeißen! Und hinter dem, was du geschrieben hast, meine ich eine solche Komplexität erkennen zu können. Das hat nichts mit Überheblichkeit, aber viel mit Erfahrung zu tun! Offensichtlich hast du das jetzt noch gar nicht erwartet, also solltest du deine Ansprüche viell noch eine Zeitlang etwas reduzieren bis du sie selbst erfüllen kannst. Das, was du hier willst, sieht mir doch verdächtig nach sehr viel Arbeit aus und so etwas mache ich in diesem Rahmen viell 1-2x im Jahr. Nebenbei, das letzte Mal beschäftigt mich immer noch…
Ansonsten war das nicht unbedingt abwertend gemeint… ;->
Ja, üblich sind eigentl viele Buttons für viele Zwecke, ein Button für einen Zweck — Multifktsbuttons sind mir noch nicht untergekommen…
Gruß Luc :-?
Anzeige
OK, Danke fuer deine Erklaerung...
13.12.2010 14:14:57
abu
... Damit kann ich mehr anfangen. Du hast recht, was ich hier machen moechte ist schon sehr Komplex aber das war mir schon vorher bewusst. Trotzdem bin ich nicht ganz deiner Meinung wenn du sagst das man sich da alleine durchbeissen muss. Ob Alles nun Komplex ist oder nicht, ich habe zu einem kleinen Problem um Hilfe gebeten und nicht mein gesamtes Werk hier reingestellt und gesagt macht mal bitte. Ob sich jemand meiner Annimmt oder nicht steht jedem frei und ich bin bisher gut damit gefahren hier mit meinen Problemchen um Hilfe zu bitten und habe eine Menge gelernt von den fleissigen Helfern hier. Ich versuche auch so langsam mein erworbenes Wissen hier wieder einzubringen da ich auch denke das man zurueckgeben sollte.
Also vllt. noch mal meine Frage die du vllt. beantworten moechtest. Kann man das x nun aktivieren oder nicht?
Gruesse
abu
Anzeige
Das war wirklich ein scheinbar kleines...
13.12.2010 15:44:19
Luc:-?
…Problem, Abu,
aber entstanden aus einem unkonventionellen Lösungsversuch, der reines VBA verlässt (ActiveX-DLLs!) und den deshalb nur Wenige hier verstehen wdn. Bei einer konventionellen Lösung hättest du das Problem gar nicht! Und auch bei dem, was ich auf diesem Gebiet schon mal gesehen und ausprobiert habe (allerdings nur 1 Button!), nicht…
Viell hast du Glück und ein DLL-Crack interessiert sich dafür. Ansonsten darfst du gerne auch in einem der vielen anderen xl- und vbForen fragen — die Karenzzeit ist ja schon rum…
Gruß Luc :-?
Danke fuer den Tip, Gruss abu - owt
14.12.2010 13:14:35
abu
.

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige