Das Makro muss im Grunde dieses tun:
• die erkannte Zeile erfassen (optimal allerdings nur den gefüllten teile)
• dieses als Druckbereich festlegen (was etwas knippelig ist wenn du eine ganze Zeile markierst oder nur einfach in-die-Zeile-klickst)
• den Druckbreich drucken
• den Druckbereich dieser löschen (ist besser)
Das Problem woran ein Aufzeichnen scheitert ist, den Druckbereich sauber zu erfassen.
Private Const links As Integer = 1
Private Const rechts As Integer = 17
Private Zeile As Integer
'links und rechts habe ich hier mal willkürlich festgelegt
Sub ZeileDruckenA()
'druckt die oberste Zeile einer Auswahl
' (was "diese Zeile" ist wenn nur eine gewählt wurde
Dim Zeile As Integer
Zeile = Selection.Row
DruckBereichDrucken links, rechts, Zeile
End Sub
Sub ZeileDruckenB()
'Wenn mehrere Zellen (eine einzige je Zeile, bitte) markiert sind
' wereden alle Zeilen einzeln ausgedruckt
Dim Zelle As Range
For Each Zelle In Selection
Zeile = Zelle.Row
DruckBereichDrucken links, rechts, Zeile
Next
End Sub
Sub ZeileDruckenB()
'Unter Annahme, dass die zu druckenden Werte lückenlos sind
' bestimmen wir nun den Druckbereich automatisch
Dim SpalteLinks As Integer
Dim SpalteRechts As Integer
Dim Zelle As Range
'ein Vorspann für alle - Annhame, dass alles gleich lang ist
Zeile = Selection.Row
SpalteLinks = 1 'dumme Annahme: vorne sind leere Zellen
While Cells(Zeile, SpalteLinks) = ""
SpalteLinks = SpalteLinks + 1
Wend
SpalteRechts = SpalteLinks
While Cells(Zeile, SpalteRechts + 1) <> ""
SpalteRechts = SpalteRechts + 1
Wend
'nun drucken
For Each Zelle In Selection
Zeile = Zelle.Row
DruckBereichDrucken SpalteLinks, SpalteRechts, Zeile
Next
End Sub
'Das Asudruck-Makro
Sub DruckBereichDrucken(LinkeSpalte As Integer, _
RechtSpate As Integer, AktuelleZeile As Integer)
'Druckbereich festlegen
ActiveSheet.PageSetup.PrintArea = _
Cells(AktuelleZeile, LinkeSpalte).Address & ":" _
& Cells(AktuelleZeile, RechteSpate).Address
'der Druckbefehl; da kann man ggf. noch was anpassen
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True
'Druckbereich aufheben
ActiveSheet.PageSetup.PrintArea = ""
End Sub
All das gehört in eine sog. Modul. Welche Funktion die am esente zusagt musst du nun entscheiden; links & rechts sind wenn natürlich anzupassen. Auch lassen sich SpalteLinks & SpalteRechts je Zeile einzeln und auch an anderen Regeln erfassen (ich zähle ja vom linken Rand her, das ginge für rechts natürlich genauso)
Eric March