Microsoft Excel

Herbers Excel/VBA-Archiv

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

Druck über Buttons erzwingen | Herbers Excel-Forum


Betrifft: Druck über Buttons erzwingen von: Thor
Geschrieben am: 11.12.2009 09:14:23

Guten Morgen,

ich möchte erreichen, dass die Formulare in meiner Excel-Datei NUR per eingefügtem Button gedruckt werden können.

Dazu habe ich jetzt per

Private Sub Workbook_BeforePrint(Cancel As Boolean)
      MsgBox "Du sollst doch den Druck-Button am Ende der Eingabemaske benutzen :-)"
      Cancel = True
End Sub
das Drucken gesperrt.

Doof ist nur, dass dadurch natürlich auch das Drucken per Button gesperrt ist.

Also habe ich versucht, die in Excel vorhandenen Druck-Buttons zu deaktivieren.

Dazu wollte ich:
Application.CommandBars("Worksheet Menu Bar").Controls("Datei").Controls("Drucken...").Enabled = _
 False

Application.CommandBars("Standard").Controls("Drucken...").Enabled = False
benutzen (den Code habe ich hier im Forum gefunden).

Leider steh ich grad völlig auf dem Schlauch. Ich weiss nicht, wo und wie genau ich den Code eintrage. Einfach in "vba-Projekt_Diese Arbeitsmappe"? Ohne irgendwelche Zusätze?

Sorry, wenn die Fragen irgendwie dämlich erscheinen, aber ich bin totaler vba-Laie.

Achja, Excel-Version zuhause 2000, auf Arbeit (dort, wo auch die Tabelle laufen soll) 2003.

Danke schonmal

Thor

  

Betrifft: AW: Druck über Buttons erzwingen von: Thor
Geschrieben am: 11.12.2009 09:20:01

Vielleicht noch als weitere Hintergrundinfo.

Der Druck soll deswegen NUR über den eingefügten CommandButton erfolgen, da ich über diesen die Art und Anzahl der jeweils ausgedruckten Formulare bestimmt habe, z.B. Tab2 3mal und Tab5 2 mal oder Tab4 1mal und Tab 6 5 mal.


  

Betrifft: AW: Druck über Buttons erzwingen von: {Boris}
Geschrieben am: 11.12.2009 09:20:24

Hi Thor,

das kannst Du über eine Boolsche Public-Variable lösen, die Du zu Beginn des Print-Ereignisses abfragst.

Grüße Boris


  

Betrifft: AW: Druck über Buttons erzwingen von: Thor
Geschrieben am: 11.12.2009 09:26:06

Hallo Boris,

erstmal danke für die schnelle Antwort.

Aber könntest Du mir das bitte etwas genauer erklären, evtl mit einem Beispiel? Ich bin wie gesagt mehr oder weniger kompletter Laie was vba angeht. Ich war schon glücklich, meine CommandButtons passend "programmiert" zu haben :)


  

Betrifft: AW: Druck über Buttons erzwingen von: {Boris}
Geschrieben am: 11.12.2009 09:30:58

Hi Thor,

in ein allgemeins Modul:

Option Explicit
Public bolPrint As Boolean

Sub Drucken_Makro()
bolPrint = True
End Sub
Das Makro "Drucken_Makro" ist Deinem Button zugewiesen.

Und in das Klassenmodul "DieseArbeitsmappe":
Option Explicit

Private Sub Workbook_BeforePrint(Cancel As Boolean)
If Not bolPrint Then Cancel = True
'Hier kannst Du jetzt drucken, was Du willst
bolPrint = False
End Sub



  

Betrifft: Cancel = Not bolPrint reicht! Gruß owT von: Luc:-?
Geschrieben am: 11.12.2009 09:34:30

:-?


  

Betrifft: Klar, allerdings... von: {Boris}
Geschrieben am: 11.12.2009 09:36:22

Hi Luc,

für "Kaum VBA-Kenntnisse" noch schwerer nachzuvollziehen ;-)

Grüße Boris


  

Betrifft: Danke @ Boris von: Thor
Geschrieben am: 11.12.2009 09:48:01

Danke Boris für die schnelle und kompetente Hilfe.

Hab den Code mal gleich getestet. Funktioniert hervorragend :)


  

Betrifft: Alle Menüpunkte aus von: Rudi Maintaire
Geschrieben am: 11.12.2009 09:43:46

Hallo,
oder etwas aufwändiger so:
In DieseArbeitsmappe

Option Explicit

Private Sub Workbook_Activate()
  Drucken_EinAus False
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
  Drucken_EinAus True
End Sub

Private Sub Workbook_Open()
  Drucken_EinAus False
End Sub

Private Sub Workbook_Deactivate()
  Drucken_EinAus True
End Sub

Private Sub Drucken_EinAus(blnEnabled As Boolean)
  Dim c As CommandBar
  On Error Resume Next
  For Each c In Application.CommandBars
    c.FindControl(ID:=4, recursive:=True).Enabled = blnEnabled
    c.FindControl(ID:=2521, recursive:=True).Enabled = blnEnabled
  Next
  On Error GoTo 0
  If blnEnabled Then
    Application.OnKey "^p"
  Else
    Application.OnKey "^p"
  End If
End Sub

Gruß
Rudi


  

Betrifft: Danke auch an Dich von: Thor
Geschrieben am: 11.12.2009 09:51:36

Hallo Rudi,

auch an Dich ein dickes Danke schön für die rasche Hilfe.

Ich werde morgen im Büro mal Deine und Boris`Lösung auf den Büro-Rechnern durchspielen. Je nachdem, wie "beschnitten" unsere Systeme sind, sollte es so funktionieren.

Zumindest läuft es bei mir zuhause hervorragend :)


  

Betrifft: Korrektur von: Rudi Maintaire
Geschrieben am: 11.12.2009 09:57:38

Private Sub Drucken_EinAus(blnEnabled As Boolean)
  Dim c As CommandBar
  On Error Resume Next
  For Each c In Application.CommandBars
    c.FindControl(ID:=4, recursive:=True).Enabled = blnEnabled
    c.FindControl(ID:=2521, recursive:=True).Enabled = blnEnabled
  Next
  On Error GoTo 0
  If blnEnabled Then
    Application.OnKey "^p"
  Else
    Application.OnKey "^p", ""
  End If
End Sub



  

Betrifft: AW: Korrektur von: Thor
Geschrieben am: 11.12.2009 10:21:29

Hallo Rudi,

Mit Deinem Code ist es aber immer noch möglich per Strg+P auf das Druckmenü zuzugreifen.

Kann man das auch noch unterbinden?

Das Problem ist einfach, dass die lieben Kollegen sonst unter Garantie das Ganze NICHT über die selbstdeffinierten Buttons ausdrucken und mich dann von der Seite anmachen, es würde nicht funktionieren wie geplant. Und ehrlich gesagt, habe ich keine Lust, die Kollegen jedesmal auf Ihre eigene Unfähigkeit hinzuweisen, den richtigen Button zu nutzen *g


  

Betrifft: AW: Korrektur von: Rudi Maintaire
Geschrieben am: 11.12.2009 10:30:54

Hallo,

Mit Deinem Code ist es aber immer noch möglich per Strg+P auf das Druckmenü zuzugreifen.

Deshalb die Korrektur.

Gruß
Rudi


  

Betrifft: AW: Korrektur von: Thor
Geschrieben am: 11.12.2009 10:39:33

Ah, ich seh schon

Danke nochmal :)


Beiträge aus den Excel-Beispielen zum Thema "Druck über Buttons erzwingen"