Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema MsgBox
BildScreenshot zu MsgBox MsgBox-Seite mit Beispielarbeitsmappe aufrufen

drucken oder seitenansicht

Betrifft: drucken oder seitenansicht von: chris b
Geschrieben am: 15.01.2008 09:00:25

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

  

Betrifft: AW: drucken oder seitenansicht von: Rudi Maintaire
Geschrieben am: 15.01.2008 10:21:04

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


  

Betrifft: AW: drucken oder seitenansicht von: Nepumuk
Geschrieben am: 15.01.2008 10:51:30

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


  

Betrifft: AW: drucken oder seitenansicht von: chris b
Geschrieben am: 15.01.2008 14:41:49

hey super,
ich danke Dir, euch !!


  

Betrifft: AW: drucken oder seitenansicht von: chris b
Geschrieben am: 15.01.2008 14:42:07

hey super,
ich danke Dir, euch !!


 

Beiträge aus den Excel-Beispielen zum Thema "drucken oder seitenansicht"