HERBERS Excel-Forum - die Beispiele

Thema: Uhr in Menüleiste

Home

Gruppe

API

Problem

In der Excle-Menüleiste soll eine Uhr integriert und auf Wunsch wieder gelöscht werden.

Lösung
Den nachstehenden Code in ein Standardmodul eingeben, einer Schaltfläche zuweisen und starten.
StandardModule: Modul1

Sub StartClock()
   StartClockinMenu
End Sub

Sub StopClock()
   StopClockinMenu
End Sub

StandardModule: Modul2

 Private Declare Function FindWindow _
        Lib "user32" _
        Alias "FindWindowA" _
       ( _
        ByVal lpClassName As String, _
        ByVal lpWindowName As String _
       ) _
        As Long
                
 Private Declare Function SetTimer _
        Lib "user32" _
       ( _
        ByVal hWnd As Long, _
        ByVal nIDEvent As Long, _
        ByVal uElapse As Long, _
        ByVal lpTimerFunc As Long _
       ) _
        As Long
        
 Private Declare Function KillTimer _
        Lib "user32" _
       ( _
        ByVal hWnd As Long, _
        ByVal nIDEvent As Long _
       ) _
        As Long

 Private Declare Function GetCurrentVbaProject _
        Lib "vba332.dll" _
        Alias "EbGetExecutingProj" _
       ( _
        hProject As Long _
       ) _
        As Long
        
 Private Declare Function GetFuncID _
        Lib "vba332.dll" _
        Alias "TipGetFunctionId" _
       ( _
        ByVal hProject As Long, _
        ByVal strFunctionName As String, _
        ByRef strFunctionID As String _
       ) _
        As Long
        
 Private Declare Function GetAddr _
         Lib "vba332.dll" _
         Alias "TipGetLpfnOfFunctionId" _
       ( _
         ByVal hProject As Long, _
         ByVal strFunctionID As String, _
         ByRef lpfnAddressOf As Long _
       ) _
        As Long

 Private WindowsTimer As Long
 Private ClockCBControl As CommandBarButton
 
Sub StartClockinMenu()
    Set ClockCBControl = _
      Application.CommandBars(1).Controls.Add( _
         Type:=msoControlButton, Temporary:=True)
    ClockCBControl.Style = msoButtonCaption
    ClockCBControl.Caption = Format(Now, "Long Time")
    fncWindowsTimer 1000
End Sub

Sub StopClockinMenu()
    fncStopWindowsTimer
    ClockCBControl.Delete
End Sub

 Private Function fncWindowsTimer( _
                                 TimeInterval As Long _
                               ) As Boolean
  Dim WindowsTimer As Long
  WindowsTimer = 0
  If Val(Application.Version) > 8 Then
     WindowsTimer = SetTimer _
       ( _
        hWnd:=FindWindow("XLMAIN", Application.Caption), _
        nIDEvent:=0, _
        uElapse:=TimeInterval, _
        lpTimerFunc:=AddrOf_cbkCustomTimer _
       )
  Else
     WindowsTimer = SetTimer _
       ( _
        hWnd:=FindWindow("XLMAIN", Application.Caption), _
        nIDEvent:=0, _
        uElapse:=TimeInterval, _
        lpTimerFunc:=AddrOf("cbkCustomTimer") _
       )
  End If
  fncWindowsTimer = CBool(WindowsTimer)
End Function

 Private Function fncStopWindowsTimer()
  KillTimer _
           hWnd:=FindWindow("XLMAIN", Application.Caption), _
           nIDEvent:=WindowsTimer
End Function

 Private Function cbkCustomTimer _
        ( _
         ByVal Window_hWnd As Long, _
         ByVal WindowsMessage As Long, _
         ByVal EventID As Long, _
         ByVal SystemTime As Long _
        ) _
         As Long
  Dim CurrentTime As String
  On Error Resume Next
  ClockCBControl.Caption = Format(Now, "Long Time")
End Function

 
 Private Function AddrOf _
       ( _
         CallbackFunctionName As String _
       ) _
         As Long
   Dim aResult As Long
   Dim CurrentVBProject As Long
   Dim strFunctionID As String
   Dim AddressOfFunction As Long
   Dim UnicodeFunctionName As String
   UnicodeFunctionName = StrConv(CallbackFunctionName, vbUnicode)
   If Not GetCurrentVbaProject(CurrentVBProject) = 0 Then
      aResult = GetFuncID _
       ( _
         hProject:=CurrentVBProject, _
         strFunctionName:=UnicodeFunctionName, _
         strFunctionID:=strFunctionID _
       )
       If aResult = 0 Then
          aResult = GetAddr _
                 ( _
                   hProject:=CurrentVBProject, _
                   strFunctionID:=strFunctionID, _
                   lpfnAddressOf:=AddressOfFunction _
                 )
          If aResult = 0 Then
             AddrOf = AddressOfFunction
          End If
       End If
   End If
 End Function
 
 Private Function AddrOf_cbkCustomTimer() As Long
   AddrOf_cbkCustomTimer = vbaPass(AddressOf cbkCustomTimer)
 End Function
 
 Private Function vbaPass(AddressOfFunction As Long) As Long
   vbaPass = AddressOfFunction
 End Function

Beiträge aus dem Excel-Forum zu den Themen API und Menue

Excel to Word Kapitel VBA Anfangskapital berechnen
Gestapelte Säulen-Diagramm: Ich kapier's nicht Excel Form Kontextmenue geht nicht
Googel Maps API in Excel VBA einfügen Zellen Kontextmenue ausfuehren
Dynamisches Kontextmenue Berechnung vom Endkapital
Makro für Pulldown Menue Menueeintrag einbinden
API? - xl-Parameter aus Long-Wert bestimmen Berechnung Kapitalanlage
makro in kontextabhängiges Befehlsmenue Menue mit eigenen Macros versehen
Telefonnummer auslesen per TAPI Entfernen eines Eintrages im Kontextmenue
Untermenue von Menueleiste Läuft RSAPI.DLL mit WIN2000 und XP?
Adresszeile/Formelzeile im Menue ist weg JAVA API mit VBA verwenden
FaceId bei Untermenue möglich? Menue Leiste ein ausblenden
Menue nur erstellen, wenn noch nicht vorhadnen Menuebar ausblenden
2003 Menuepunkte in 2007 finden Kontexmenue
Filter als Dropdown-Menue in neuem Tabellenblatt Papierformat speichern
Menue verschiedene Papierquele beim Drucken
Entnahme mit Kapitalverzehr Berechnung Endkapital / Zinsen
Eigenes Formatierungsmenue Druck auf Papier und PDF mit und ohne Logo
Frage zur RSAPI.DLL Kontextmenue
Kombination Seitenumbruch Papierformat Anpassen Hilfe bei der Fehlersuche (API)
Frage zu XKAPITALWERT API-Zugriff
Endkapital? bei unterschiedlichen Zahlungen API für Tastaturpuffer auslesen
API für Tastaturpuffer auslesen Autofilter, polldown Menue in Fragmenten?
Drop down Menue Excel Menues mit Bildern
Pfeil im Drop-Down-Menue dauerhaft Beispiel Verwendung WINAPI...
Zellen wie Milimeterpapier skalieren Drop Down Menue in Zelle