2.6k Aufrufe
Gefragt in WindowsXP von
Ich suche ein Makro für folgende Aufgabe: Aus einem Tabellenblatt (Excel 2003) mit über 1.000 Zeilen möchte ich auf Knopfdruck einzelne Zeilen ausdrucken - mal Zeile 2, mal Zeile 253 etc., also "wahllos". Kann ich das per Makro machen?

10 Antworten

0 Punkte
Beantwortet von
Hallo, natürlich geht das per Makro und solange du das von Hand machen kannst, dann würdest du bestimmt es mit dem Makro hinbekommen:-D
Hast du dir schon mal diese Schaltflächen "Makro aufzeichnen ..." bei Excel angesehen?
Kann sein, dass du es erst mal aktivieren musst.
Gebe mal in der Hilfe "Makro aufzeichnen" ein.
Mache dir eine kleine Testtabelle und versuche es einfach.

Gruß
0 Punkte
Beantwortet von ericmarch Experte (4.6k Punkte)
Dummfrag:
Jeweils eine einzelne Zeile einzeln auf ein Blatt Papier - oder denkst du an eine Sammlung willkürlicher einzelner Zeilen die dann in einem Rutsch aufs Papier sollen?

Eric March
0 Punkte
Beantwortet von
Ich brauche jeweils eine einzelne Zeile einzeln auf einem Blatt Papier
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo Magdalene,

soll immer nur die aktuelle Zeile ausgedruckt werden, oder willst du die Zeilennummern, die ausgedruckt werden sollen, eingeben?

Gruß

M.O.
0 Punkte
Beantwortet von ericmarch Experte (4.6k Punkte)
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
0 Punkte
Beantwortet von ericmarch Experte (4.6k Punkte)
@M.O.
Auch eine Idee statt meiner eher (Finger)fehlerastigen Klickorgie; hat alles seine Vorzüge :)
E.M.
0 Punkte
Beantwortet von m-o Profi (22.8k Punkte)
Hallo,

da Eric ja schon ein Makro gepostet hat, hier mal meine zwei Vorschläge :-).

aktuelle Zeile wird ausgedruckt:

Sub zeile_drucken1()

Range(Cells(ActiveCell.Row, 1), Cells(ActiveCell.Row, ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column)).PrintOut

End Sub


Oder hier mit Eingabe der Zeilennummer:

Sub zeile_drucken2()

Dim zeile As Long

'Eingabe der Zeile
On Error GoTo Abbruch:
zeile = InputBox("Bitte geben Sie die Zeilennummer ein (letzte beschriebene Zeile: " & ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row & ")", "Eingabe Zeilennummer zum Ausdrucken")

'prüfen ob eingegebene Zeile innerhalb des genutzten Bereichs liegt, falls nicht erfolgt Abbruch
If zeile > ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row Then
MsgBox "Bitte geben Sie eine Zeilennummer kleiner gleich " & ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row & " ein!", 16, "Fehlermeldung"
Exit Sub
End If

'Zeile ausdrucken
Range(Cells(zeile, 1), Cells(zeile, ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Column)).PrintOut

Exit Sub

'Wenn keine Zahl eingegeben wurde, dann wird der Fehler abgefangen und das Makro beendet
Abbruch:
MsgBox "Die Eingabe ist keine Zahl! Abbruch!", 16, "Fehlermeldung"

End Sub


Beide Codes sind in ein Standard Modul einzufügen.

Gruß

M.O.
0 Punkte
Beantwortet von
Danke, das probiere ich mal aus.

@Frage: Am liebsten würde ich nur die Zeilennummer eingeben - schon
deswegen, damit man beim Makieren nichts vergisst
0 Punkte
Beantwortet von
Jetzt haben sich die letzten posts überschnitten. Danke für die weiteren Vorschläge! :-)
0 Punkte
Beantwortet von ericmarch Experte (4.6k Punkte)
@M.O.
Ich bin gegen diese SpecialCells(xlCellTypeLastCell) prinzipiell allergisch weil ich schon oft erlebte, dass gelöschte Zellen immer noch als «bewegt»/benutze gelten und diese Zellen dann falsche Eckdaten liefern.
Eric March
...