Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
940to944
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
940to944
940to944
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

drucken oder seitenansicht

drucken oder seitenansicht
15.01.2008 09:00:00
chris
Hallo VBA Profis,
ich habe eine fragen und hoffe ihr könnt mir helfen.
Gibt es mittlerweilen schon eine möglichkeit zu unterscheiden ob mann
"seitenansicht" oder "drucken" geklickt hat ?
Ich möchte das ein makro abläuft aber nur wenn drucken geklickt wurde.
Wie erreiche ist das ?
Wäre über Hilfe dankbar !
gruß Chris

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: drucken oder seitenansicht
15.01.2008 10:21:00
Rudi
Hallo,
dazu musst du die Standardaktionen der Buttons 'verbiegen'.
In DieseArbeitsmappe

Private Sub Workbook_Activate()
Application.CommandBars.FindControl(ID:=2521).OnAction = "prcDrucken"
Application.CommandBars.FindControl(ID:=109).OnAction = "prcSeitenAnsicht"
End Sub
Private Sub Workbook_DeActivate()
Application.CommandBars.FindControl(ID:=2521).OnAction = ""
Application.CommandBars.FindControl(ID:=109).OnAction = ""
End Sub


In ein Modul


Sub prcDrucken()
MsgBox "Drucken"
'   ActiveSheet.PrintOut
End Sub
Sub prcSeitenAnsicht()
MsgBox "Seitenansicht"
'   ActiveSheet.PrintPreview
End Sub


Gruß
Rudi
Eine Kuh macht Muh, viele Kühe machen Mühe

Anzeige
AW: drucken oder seitenansicht
15.01.2008 10:51:30
Nepumuk
Hallo Chris,
oder ein bisschen API-Gedöns einsetzen:
' **********************************************************************
' Modul: DieseArbeitsmappe Typ: Element der Mappe(Sheet, Workbook, ...)
' **********************************************************************

Option Explicit

Private Sub Workbook_BeforePrint(Cancel As Boolean)
    prcStartTimer
End Sub

' **********************************************************************
' Modul: Modul1 Typ: Allgemeines Modul
' **********************************************************************

Option Explicit

Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _
    ByVal hWnd As Long, _
    ByVal wMsg As Long, _
    ByVal wParam As Long, _
    ByRef lParam As Any) As Long
Private Declare Function GetClassName Lib "user32.dll" Alias "GetClassNameA" ( _
    ByVal hWnd As Long, _
    ByVal lpClassName As String, _
    ByVal nMaxCount As Long) As Long
Private Declare Function EnumChildWindows Lib "user32.dll" ( _
    ByVal hWndParent As Long, _
    ByVal lpEnumFunc As Long, _
    ByVal lParam As Long) As Long
Private Declare Function KillTimer Lib "user32.dll" ( _
    ByVal hWnd As Long, _
    ByVal nIDEvent As Long) As Long
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 FindWindow Lib "user32.dll" Alias "FindWindowA" ( _
    ByVal lpClassName As String, _
    ByVal lpWindowName As String) As Long

Private Const GC_CLASSNAMEMSEXCEL = "XLMAIN"
Private Const WM_GETTEXTLENGTH As Long = &HE
Private Const WM_GETTEXT As Long = &HD

Private hWnd As Long, lngConter As Long
Private strButtonCaption As String

Public Sub prcStartTimer()
    lngConter = 0
    strButtonCaption = " &Weiter &Vorher &Zoom &Drucken... &Layout... &Ränder "
    hWnd = FindWindow(GC_CLASSNAMEMSEXCEL, Application.Caption)
    If hWnd <> 0 Then _
        SetTimer hWnd, 0&, 200&, AddressOf prcTimer
End Sub

Private Sub prcStopTimer()
    KillTimer hWnd, 0&
End Sub

Private Sub prcTimer(ByVal hWnd As Long, ByVal nIDEvent As Long, _
        ByVal uElapse As Long, ByVal lpTimerFunc As Long)

    On Error Resume Next
    Call prcStopTimer
    Call EnumChildWindows(hWnd, AddressOf fncWndEnumChildProc, 0&)
    If lngConter = 6 Then
        MsgBox "Seitenansicht"
    Else
        MsgBox "Drucken"
    End If
End Sub

Public Function fncWndEnumChildProc(ByVal hWnd As Long, ByVal lParam As Long) As Long
    Dim lngReturn As Long
    Dim strClassName As String * 50
    Call GetClassName(hWnd, strClassName, 50)
    If Left$(strClassName, InStr(strClassName & vbNullChar, vbNullChar) - 1) = "Button" Then _
        If Cbool(InStr(1, strButtonCaption, fncGetText(hWnd))) Then lngConter = lngConter + 1
    fncWndEnumChildProc = 1
End Function

Function fncGetText(hWnd As Long) As String
    Dim lngTextlen As Long
    Dim strText As String
    lngTextlen = SendMessage(hWnd, WM_GETTEXTLENGTH, 0, 0)
    If lngTextlen = 0 Then Exit Function
    lngTextlen = lngTextlen + 1
    strText = Space(lngTextlen)
    lngTextlen = SendMessage(hWnd, WM_GETTEXT, lngTextlen, ByVal strText)
    fncGetText = Left$(strText, lngTextlen)
End Function

Gruß
Nepumuk

Anzeige
AW: drucken oder seitenansicht
15.01.2008 14:41:49
chris
hey super,
ich danke Dir, euch !!

AW: drucken oder seitenansicht
15.01.2008 14:42:07
chris
hey super,
ich danke Dir, euch !!

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige