Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

drucken oder seitenansicht

Forumthread: 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

Anzeige

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
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige