Problem mit Makro "Workbook_BeforePrint"

Bild

Betrifft: Problem mit Makro "Workbook_BeforePrint" von: Martin Kuegler
Geschrieben am: 14.03.2005 12:39:27

Hi All!

Ich habe ein Problem mit einem Makro (was ich aber auch nur aus aus einem anderen Beitrag kopiert habe).

Ziel des Makros ist es, beim Ausdruck in Excel (egal ob das angezeigt tabellenblatt oder die gesamte Arbeitsmappe) nut einen definierten Bereich (printarea) auszudrucken.

Dazu habe ich in die jeweiligen Tabellen folgenden Code geschrieben:
Public


Sub drucke()
Application.EnableEvents = False
ActiveSheet.PageSetup.PrintArea = "A1:C39"
ActiveSheet.PageSetup.Orientation = xlPortrait
ActiveSheet.PrintOut
Application.EnableEvents = True
End Sub

und in diese Arbeitsmappe:
Public

Sub Workbook_BeforePrint(Cancel As Boolean)
Cancel = True
drucke
End Sub

Leider bekomme ich beim Klicken auf die Schaltfläche Drucken jedesmal eine Fehlermeldung("Fehler beim Kompilieren

Sub oder 

Function nicht definiert")
Danach wird aber auch so wie es sein soll, der definierte Bereich ausgedruckt.
Doch warum bekomme ich die Fehlermeldung?
Danke für die ggf. folgenden Tips!
Martin
Bild


Betrifft: AW: Problem mit Makro "Workbook_BeforePrint" von: Uduuh
Geschrieben am: 14.03.2005 12:55:32

Hallo,
Hallo,
das Makro 'drucke' muss in ein normales Modul.

Gruß aus'm Pott
Udo



Bild


Betrifft: AW: Problem mit Makro "Workbook_BeforePrint" von: Martin Kuegler
Geschrieben am: 14.03.2005 13:27:44

Hi!

Tut mir ja leid, aber ich glaube ich verstehe nicht ganz, as ein "normales Modul" ist. Etwa ohne Public am Anfang?

Also in "dieseArbeitsmappe":

Sub Workbook_BeforePrint(Cancel As Boolean)
Cancel = True
drucke
End Sub

und dann in den Tabellen 1 bis X:

Sub drucke()
Application.EnableEvents = False
ActiveSheet.PageSetup.PrintArea = "xx:xx"
ActiveSheet.PageSetup.Orientation = xlPortrait
ActiveSheet.PrintOut
Application.EnableEvents = True
End Sub



Bild


Betrifft: AW: Problem mit Makro "Workbook_BeforePrint" von: u_
Geschrieben am: 14.03.2005 13:52:26

Hallo,
im VB-Editor Rechtsklick auf dein Projekt, Einfügen - Modul und den Code da rein kopieren. In den Klassenmodulen (Tabelle1, Tabelle2 etc) wird das Makro nicht gefunden.
Gruß


Bild


Betrifft: Leider noch nicht ganz von: Martin Kuegler
Geschrieben am: 14.03.2005 14:17:20

Danke hat zwar ohne Fehlermeldung funktioniert, aber...

ich möchte allerdings in den einzelnen Tebellenblättern unterschiedliche Print-areas definieren. Beispielweise in Tabellenblatt 1 A1 bis C40 in Blatt 2 A1 bis D50 usw.
Die jetzige Lösung würde also nur auf einem Blatt funktionieren.

Daher müsste ich irgendeinen Verweis auf eine Printarea in das Modul schreiben, die in den einzelnen Blättern separat definiert ist.


Bild


Betrifft: AW: Leider noch nicht ganz von: u_
Geschrieben am: 14.03.2005 14:59:14

Hallo,
wenn der Druckbereich für jedes Blatt statisch ist, lege ihn doch einfach fest!
Dann brauchst du auch kein Makro.

Gruß


Bild


Betrifft: AW: Leider noch nicht ganz von: Martin Kuegler
Geschrieben am: 14.03.2005 15:21:24

Danke, dieses Problem ist gelöst.

Warum bin ich nicht selbst auf diese Idee gekommen. Ganz einfach: Weil nach etwas längerer Benutzung viele Punkte im Menü einfach mal automatisch ausgblendet werden.

Wenn Du versiert bist, dann kann ich Dir vielleicht noch die etwas einfachere Frage stellen, wie man Zellen in Abhängigkeit von anderen Zelleninhalten formatiert und sperrt.

Wenn also In Zelle B2 "Nein" steht, müsste ich zwei andere Zelle (B7 und B9) sperrren können bzw. die Formatierung ändern können. Das dass komplette Arbeitsblatt bis auf einige (meinetwegen 10 Zellen) schon mal komplett gesperrt ist, müssten zusätzlich allerdings ohne den Blattschutz auszuheben, 2 weitere Zellen gesperrt werden. So dass man nach Eingabe von "Nein" und bei Betätigung von Enter diese beiden Zellen (B7 und B9) überspringt.

Gruß


Bild


Betrifft: AW: Leider noch nicht ganz von: u_
Geschrieben am: 14.03.2005 15:39:42

Hallo,
das Format kannst du (in Grenzen) über die bedingte Formatierung festlegen.
Für die Sperre kommt nur VBA in Frage.
In den Code der Tabelle:

Private Sub Worksheet_Change(ByVal Target As Range)
  Select Case Target.Address(0, 0)
    Case "B7", "B9"
      If LCase(Range("B2")) = "nein" Then
        Application.EnableEvents = False
        Application.Undo
        Application.EnableEvents = True
      End If
  End Select
End Sub

Gruß


Bild


Betrifft: AW: Leider noch nicht ganz von: Martin Kuegler
Geschrieben am: 14.03.2005 18:00:06

Danke!

Ich werde das mal ausprobieren und demnächst meine VB-Kenntnisse etwas erweitern.

Gruß
Martin


 Bild

Beiträge aus den Excel-Beispielen zum Thema "Problem mit Makro "Workbook_BeforePrint""