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

msoControlPopup per VBA aufklappen

msoControlPopup per VBA aufklappen
09.03.2017 10:24:36
Martin

Hallo Excel-Freunde,
ich versuche jetzt schon eine ganze Weile per VBA innerhalb eines CommandBar-msoBarPopup ein untergeordnetes msoControlPopup aufzuklappen:
Userbild
Per ShowPopup wird zwar das als CommandBar übergeordnete msoBarPopup geöffnet, aber kann ich auch irgendwie per VBA ein untergeordnetes msoControlPopup aufklappen?
Viele Grüße
Martin

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

Betreff
Datum
Anwender
Anzeige
AW: msoControlPopup per VBA aufklappen
10.03.2017 17:11:59
Mullit
Hallo,
mal 'n Schuß aus der Hüfte, probiers mal mit nem .Execute-Befehl auf Deinen Popup-Button...
Gruß, Mullit
AW: msoControlPopup per VBA aufklappen
12.03.2017 18:18:51
Martin
Hallo Mullit,
ich danke dir für deine Antwort, aber die Execute-Anweisung ist auf das msoControlPopup leider nicht anwendbar. Ich befürchte fast, dass es für mein Anliegen wohl keine Möglichkeit gibt :-(
Viele Grüße
Martin
AW: msoControlPopup per VBA aufklappen
12.03.2017 22:24:43
Mullit
Hallo,
[...] aber die Execute-Anweisung ist auf das msoControlPopup leider nicht anwendbar. [...]

...wie kommst Du darauf...?
Userbild
Gruß, Mullit
Anzeige
AW: msoControlPopup per VBA aufklappen
13.03.2017 11:06:13
Martin
Hallo Mullit,
da habe ich eine entscheidende Information in meiner Antwort vergessen: [...] die Execute-Anweisung ist auf das msoControlPopup nach Verwendung der ShowPopup-Methode leider nicht anwendbar.
Um es ausführlicher zu beschreiben: Mit der ShowPopup-Methode unterbricht der VBA-Code, bis das Kontextmenü wieder geschlossen ist. Danach folgt diese Fehlermeldung:
Userbild
Ich habe keine Idee, wie ich die Excecute-Methode vor bzw. mit der ShowPopup-Methode übergeben könnte.
Hast du vielleicht eine Idee?
Viele Grüße
Martin
Anzeige
AW: msoControlPopup per VBA aufklappen
13.03.2017 20:02:53
Mullit
Hallo,
ok, Du mußt Dich Deinem 'VBA gut'-Attribut annähern und den API-Timer ins Spiel bringen, kriegst Du das gebacken, oder soll ich Dir was proggen...?
Gruß, Mullit
AW: msoControlPopup per VBA aufklappen
14.03.2017 11:23:51
Martin
Hallo Mullit,
ohje, mit API kenne ich mich leider überhaupt nicht aus. Ich würde dein Angebot wirklich gerne in Anspruch nehmen und wäre dir für die Unterstützung sehr dankbar.
Viele Grüße
Martin
AW: msoControlPopup per VBA aufklappen
15.03.2017 07:23:04
Mullit
Hallo Martin,
ok, dann mal ran, vorab zur Theorie, wie Du schon richtig erkannt hast, läuft nach Aufruf der ShowPopup-Methode ähnlich wie nach Verwenden der Msgbox-Funktion kein Code mehr, d.h. man muß Code, der die Execute-Anw. ausführt, vor dem Einblenden des Popups anlaufen lassen, mit der Möglichkeit, daß er erst hinterher ausgeführt wird >>> das geht mit dem Api-Timer.
Hier also ein Bsp. der gesamte Code kommt in ein Standardmodul, dann 'prcCreatePopup' laufen lassen, einbauen in Dein Urkundenteil mußt Du's dann noch selbst...
' ********************************************************************** 
' Modul: Modul1  Typ: Standardmodul 
' ********************************************************************** 

Option Explicit

Private Declare Function SetTimer Lib "user32.dll" ( _
     ByVal hwnd As Long, _
     ByVal nIDEvent As Long, _
     ByVal uElapse As Long, _
     ByVal lpTimerFunc As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" ( _
     ByVal hwnd As Long, _
     ByVal nIDEvent As Long) As Long
Private Declare Function GetCursorPos Lib "user32.dll" ( _
     lpPoint As POINTAPI) As Long
     
Private Const GC_POPUP_BAR As String = "My_Menu_Bar"
Private Const GC_POPUP_POSITION As Long = 4

Private Type POINTAPI
     x As Long
     y As Long
End Type

Public Sub prcCreatePopup()
 Dim udtCursorPos As POINTAPI
 Call prcDeletePopup
 With Application.CommandBars.Add(Name:=GC_POPUP_BAR, _
        Position:=msoBarPopup, Temporary:=True)
      Call prcAddButtons(prcmbControls:=.Controls, pvlngMax:=6)
      Call GetCursorPos(udtCursorPos)
      Call prcStartTimer
      Call .ShowPopup(x:=udtCursorPos.x + 50, _
            y:=udtCursorPos.y + 50)
 End With
 Call prcDeletePopup
End Sub

Private Sub prcDeletePopup()
  Dim cmbBar As CommandBar
  For Each cmbBar In Application.CommandBars
     With cmbBar
         If .Name = GC_POPUP_BAR And _
           .Type = msoBarTypePopup Then _
              Call .Delete
     End With
  Next
End Sub

Private Sub prcAddButtons(ByRef prcmbControls As CommandBarControls, _
       ByVal pvlngMax As Long)
   Dim strText As String
   Dim lngIndex As Long
   If pvlngMax = 3 Then strText = "_Pop " _
   Else: strText = " "
   With prcmbControls
        For lngIndex = 1 To pvlngMax
            With .Add(Type:=msoControlButton, Temporary:=True)
                 .Caption = "Button" & strText & lngIndex
                 .OnAction = "TestMakro"
                 If pvlngMax = 3 And lngIndex = 3 Then _
                    .State = msoButtonDown
            End With
        Next
        If pvlngMax = 6 Then
            With .Add(Type:=msoControlPopup, _
                         Before:=GC_POPUP_POSITION, Temporary:=True)
                  Call prcAddButtons(prcmbControls:=.Controls, pvlngMax:=3)
                 .Caption = "My_Popup"
            End With
        End If
  End With
End Sub

Private Sub TestMakro()
MsgBox Application.CommandBars.ActionControl.Caption
End Sub

Private Sub prcStartTimer()
Call SetTimer(Application.hwnd, 0&, 10&, AddressOf TimerProc)
End Sub

Private Sub prcStopTimer()
Call KillTimer(Application.hwnd, 0&)
End Sub

Private Sub TimerProc(ByVal pvlngHwnd As Long, ByVal pvlngnIDEvent As Long, _
     ByVal pvlnguElapse As Long, ByVal pvlnglpTimerFunc As Long)
  Static slngTimerFunc As Long
  If slngTimerFunc = 0 Then slngTimerFunc = pvlnglpTimerFunc
  With Application.CommandBars(GC_POPUP_BAR)
      If .Visible Then
        Call prcStopTimer
        slngTimerFunc = 0
        Call .Controls(GC_POPUP_POSITION).Execute
      ElseIf pvlnglpTimerFunc - slngTimerFunc > 50 Then
        Call prcStopTimer
        slngTimerFunc = 0
        Call MsgBox("Can't show Popup...!", vbExclamation, "Error")
      End If
  End With
End Sub


VBA/HTML - CodeConverter für Office-Foren
AddIn für Excel/Word 2000-2010 - komplett in VBA geschrieben von Lukas Mosimann
Projektbetreuung durch mumpel



Code erstellt und getestet in Office 14

Gruß, Mullit
Anzeige
AW: msoControlPopup per VBA aufklappen
15.03.2017 13:42:19
Martin
Hallo Mullit,
vielen lieben Dank für deine Arbeit. Dein Code funktioniert wirklich hervorragend, ich bin beeindruckt! Ich wollte mich jetzt sofort bei dir melden und bedanken, habe den Code aber noch nicht auf meine Bedürfnisse angepasst. Deshalb würde ich dich bitten diesen Beitrag noch im Blick zu behalten, falls es mir nicht gelingen sollte deinen Code auf mein msoControlPopup zu übertragen.
Ich melde mich noch einmal, sobald es mir gelungen ist (...oder ein Problem auftritt).
Nochmals ein dickes Dankeschön!
Viele Grüße
Martin
PS: Wie hast du dir die API-Kenntnisse angeeignet? Gibt es irgendwelche Fachliteratur, die du empfehlen kannst?
Anzeige
AW: msoControlPopup per VBA aufklappen
15.03.2017 18:35:12
Martin
Hallo Mullit,
deine Programmierung funktioniert auch in meinem Fall perfekt. Nochmals vielen Dank! Das hätte ich allein niemals hinbekommen, weil ich keinerlei Kenntnisse von API habe. Darf ich an dieser Stelle trotzdem noch einmal fragen wie du dir dein API-Wissen angeeignet hast und ob du irgendwelche Fachliteratur empfehlen kannst?
Viele Grüße
Martin
AW: msoControlPopup per VBA aufklappen
17.03.2017 01:12:29
Mullit
Hallo Martin,
ok, prima, ja aus einer Mischung von Internet-Recherche und Pdf-Book Studium (ok, gehört irgendwie auch zur INet-Recherche...) mußt Du mal 'n bißchen Tante Gurgel befragen...
Als Bibel unter den Büchern zur VB-Api-Programmierung gilt Dan Appleman's Visual Basic Programmer's Guide to the Win32 API, gab's lange Zeit nur noch Secondhand, mußt Du mal bei Amazon gucken...
Bei den Webpages sind da u.a. als Quellen zu empfehlen:
http://www.activevb.de/startseite/index.html
http://www.vb-fun.de/vb/index.htm
http://www.vbarchiv.net/home/index.php
Vielleicht noch als Tipp: guck Dir in den Foren mal die Codes von Nepumuk (war für mich ein Top-Einstieg dazu...) und Isabelle, sowie den Blog von Case an, da findest Du schon jede Menge Beispiele...
Gruß, Mullit

Anzeige

280 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige