Microsoft Excel

Herbers Excel/VBA-Archiv

Drucken über VBA | Herbers Excel-Forum


Betrifft: Drucken über VBA von: ABO
Geschrieben am: 19.11.2009 12:21:57

Hallo zusammen,

ich habe folgendes Makro:

Sub Drucken()
Dim rLetzte As Range
Set rLetzte = Cells.Find("*", , xlValues, 2, 1, 2, False, False, False)

If Not rLetzte Is Nothing Then
 With ActiveSheet
  .PageSetup.PrintArea = .Range("A2", rLetzte).Address
  .PrintOut
  .PageSetup.PrintArea = ""
 End With
End If
ActiveSheet.PageSetup.PrintArea = "$A$2:$M$700"
End Sub
Was ich jedoch nicht nachvollziehen kann, auf welche Spalte er sich bezieht.

Ich hoffe es kann mir jemand weiter helfen.

Gruß ABO

  

Betrifft: AW: Drucken über VBA von: Björn B.
Geschrieben am: 19.11.2009 13:47:57

Hallo,

Du suchst nach *.
Die gefundene Zelle wird dann als Spalte für den Druckbereich benutzt.
Syntax für "Find":
Find(What, [After], [LookIn], [LookAt], [SearchOrder], [SearchDirection As XlSearchDirection = xlNext], [MatchCase], [MatchByte], [SearchFormat]) As Range

Gruß
Björn


  

Betrifft: AW: Drucken über VBA von: ABO
Geschrieben am: 19.11.2009 13:56:28

Hallo Björn,

wo und was muss ich ändern, damit das Makro nur die Spalte A untersucht ob Daten vorhanden sind?

Gruß Andreas


  

Betrifft: AW: Drucken über VBA von: Björn B.
Geschrieben am: 19.11.2009 14:02:41

Hallo,

wenn Du einen bestimmten Bereich (mehr als eine Zelle) markiert hast, dann sucht Excel auch nur in der Markierung.
Einfach vorher ein Range("A1:A100").Select (Zeilen natürlich noch anpassen).

Du setzt aber mit deinem Code den Druckbereich anhand der gefundenen Zelle.
Es wird also nur Spalte A gedruckt. Ist das richtig?

Gruß
Björn


  

Betrifft: AW: Drucken über VBA von: ABO
Geschrieben am: 19.11.2009 14:13:10

Hallo Björn,

nein es wird nicht nur die Spalte A gedruckt!
Es werden alle Spalten gedruckt, wo Daten vorhanden sind.

Ich möchte das die Spalte A nach Daten Überprüft wird, und dann von den Spalten A-M die Zeilen gedruckt werden wo Daten von der Spalte A vorhanden sind.
Wenn Keine Daten in den Zellen der Spalte A sind, sollen die Zeilen auch nicht gedruckt werden.

Gruß ABO


  

Betrifft: AW: Drucken über VBA von: Björn B.
Geschrieben am: 19.11.2009 14:25:25

Hallo,

dann noch ein paar Fragen.
Du schreibst:

Wenn Keine Daten in den Zellen der Spalte A sind, sollen die Zeilen auch nicht gedruckt werden.

Heißt, dass hier müssen noch Zeilen ausgeblendet werden?
Oder geht es Dir um die letzte befüllte Zeile? Das würde ich dann ganz anders machen.

Weiters schreibst Du:
es werden alle Spalten gedruckt, wo Daten vorhanden sind.

Muss das auch geprüft werden? Also nur Spalten mit Inhalt?
Oder meinst Du alle Spalten von A-M, wenn in A was steht?

Gruß
Björn B.


  

Betrifft: AW: Drucken über VBA von: ABO
Geschrieben am: 19.11.2009 14:30:59

Hallo Björn,

Punkt 1: ja wenn keine Daten in den Zellen der Spalte A sind, sollen diese Zeilen auch nicht gedruckt werden.
Punkt 2: ich meine alle Spalten von A-M

Mein Makro funktioniert ja auch soweit, jedoch werden die Spalten L-M nicht gedruckt, da dort in den Zellen noch keine Daten stehen.

Gruß ABO


  

Betrifft: AW: Drucken über VBA von: Björn B.
Geschrieben am: 19.11.2009 14:33:35

Dein Makro kann den Punkt 1 nicht berücksichtigen...
Ist es wirklich so, dass du Leerzeilen hast, die nicht gedruckt werden und dann kommen wieder welche mit Inhalt? Das müsstest Du über Autofilter lösen.
Also ich meine z.B.
Drucken Zeile 1-127; dann Zeile 128-135 leer, auch nicht drucken; dann 136-150 drucken

Gruß
Björn B.


  

Betrifft: AW: Drucken über VBA von: ABO
Geschrieben am: 19.11.2009 14:44:12

Hallo Björn,

ich verstehe nicht ganz was du mir damit sagen willst.
Die Zeilen Funktionieren bei mir schon. Es werden nur die Zeilen Gedruckt wo Daten vorhanden sind.
Das einzigste was noch nicht funktioniertist, dass die Spalte L-M nicht mit ausgedruckt wird.

Gruß ABO


  

Betrifft: AW: Drucken über VBA von: Björn B.
Geschrieben am: 19.11.2009 14:55:49

Ok, da haben wir klassisch aneinander vorbeigeredet...

Du brauchst die Zeile:

.PageSetup.PrintArea = "A2:M" + CStr(rLetzte.Row)

Deine alte Codezeile hat von A2 bist zur letzten Zelle benutzt.
Ich verwende aus der letzten Zelle nur die Zeile und gebe das "M" für die Spalte fix ein.

Warum setzt Du am Ende den Druckbereich wieder auf A2:M700?
Und warum hebst Du ihn dazwischen ganz auf (PrintArea = "")?

Gruß
Björn


  

Betrifft: AW: Drucken über VBA von: ABO
Geschrieben am: 19.11.2009 15:04:02

Hallo Björn,

ich stelle den Druckerbereich wieder auf M2:M700, damit man über die normale Druckerfunktion die gesamte Tabelle Drucken kann.
PrintArea="" habe ich vergessen wieder heraus zu nehmen.

Gruß ABO


  

Betrifft: Funktioniert es jetzt? oT von: Björn B.
Geschrieben am: 19.11.2009 15:14:39




  

Betrifft: AW: Drucken über VBA von: IngGi
Geschrieben am: 19.11.2009 15:03:08

Hallo ABO,

ich wusste gar nicht, dass man einen Druckbereich definieren kann, der aus mehreren getrennten Zellbereichen besteht. Aber du sagst ja selbst, dass das mit den Zeilen bei dir funktioniert. Dann müsste mit folgendem Makro (kleine Änderung in der Find-Zeile) auch die Spaltenauswahl hinhauen:

Sub Drucken()

Dim rLetzte As Range
Set rLetzte = Range("A:A").Find("*", , xlValues, 2, 1, 2, False, False, False)

If Not rLetzte Is Nothing Then
  With ActiveSheet
    .PageSetup.PrintArea = .Range("A2", rLetzte).Address
    .PrintOut
    .PageSetup.PrintArea = ""
  End With
End If

ActiveSheet.PageSetup.PrintArea = "$A$2:$M$700"

End Sub
Code eingefügt mit VBA in HTML 2.0.0.3

Gruß Ingolf


  

Betrifft: AW: Drucken über VBA von: Björn B.
Geschrieben am: 19.11.2009 15:08:45

Hallo Ingolf,

dann lass Dich mal eines Besseren belehren:

ich wusste gar nicht, dass man einen Druckbereich definieren kann, der aus mehreren getrennten Zellbereichen besteht.

Natürlich geht das, z.B. so:
ActiveSheet.PageSetup.PrintArea = "$E$33,$B$20:$D$21,$F$10:$G$12,$H$4:$J$9,$C$10:$D$14,$A$35,$F$40"

Du kannst einen Druckbereich aus zig beliebigen Bereichen Deiner Tabelle definieren.
Haken dabei ist nur, dass jeder Bereich für sich auf einer extra Seite gedruckt wird.
Daher ist das meist nicht so zielführend.

Einfach mal testen.
Wild Mehrfachmarkierungen machen, dann Druckbereich festlegen und auf Seitenansicht gehen.

Übrigens habe ich das auf der Klugscheißeruniversität gelernt ;-)

Gruß
Björn


Beiträge aus den Excel-Beispielen zum Thema "Drucken über VBA"