Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1524to1528
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

spalte nach spalte ausdrucken

spalte nach spalte ausdrucken
17.11.2016 15:54:06
Fritz
Hallo miteinander
Ich sollte von einem Worksheet mit vba Spalte für Spalte je auf einer Seite ausdrucken, wobei die Spalten 1 immer mitgedruckt werden soll. Mit meinen bald 70 Jahren wieder einmal ein Excel-Problem lösen! No Problem ... Ich habe hier https://www.herber.de/forum/archiv/1168to1172/1168719_Zeile_pro_Zeile_ausdrucken.html#1168731
eine Lösung gefunden mit dem gleichen Problem, aber Zeile für Zeile. Ist doch ganz einfach, dachte ich:
lngLC = Cells(Columns.Count, 1).End(xlUp).Columns 'Letzte Spalte der Zeile 1 ermitteln
If MsgBox("Sollen jetzt alle Spalten EINZELN gedruckt werden ?", _
vbYesNo + vbQuestion) = vbYes Then
For lngC = 3 To lngLC 'Alle Spalten ab Spalte 3
Columns("c:" & lngLC).Hidden = True 'Zuerst ALLE Spalten ab Spalte 3 ausblenden
Columns(lngC).Hidden = False 'nur aktuelle Spalte einblenden
ActiveSheet.PrintOut 'Aktuelles Blatt ausdrucken
Next
End If
Columns("4:" & lngLC).Hidden = False 'ALLE Zeilen ab Spalte 4 wieder einblenden
LEIDER komme ich bei
Columns("c:" & lngLC).Hidden = True
nicht weiter, weil die Spalten natürlich mit Buchstaben beschriftet sind. Wer weiss mir da weiter. Vielen Dank!

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: spalte nach spalte ausdrucken
17.11.2016 16:23:10
Michael
Hallo Fritz,
ohne weiter nachgeschaut zu haben: mit .End(xlUp) springst Du nach oben; was Du hier willst, ist von der rechtesten Spalte nach links springen, also .End(xlToLeft).Column (ohne das s).
Ansonsten machst Du es wie in den untersten Anweisungen auch, nämlich nicht mit "c", sondern der Nummer, also "3:" &lngLC
Schöne Grüße,
Michael
AW: spalte nach spalte ausdrucken
17.11.2016 18:13:42
Fritz
Guten Abend Michael
Vielen Dank für die schnelle Antwort. Immer wieder blöde Fehler, die ich da produziere, sorry. Aber leider bin ich noch nicht ganz am Ziel. Bei der Rückstellung zuunterst kommt ein Laufzeitfehler 1004, Anwendungs- oder objektdefinierter Fehler. Löscht man die Zeile, produzierte das Programm tatsächlich
einmal einen korrekten Ausdruck der ersten und der letzten Spalte auf einer Seite. Nur war danach keine Wiederholung mehr möglich und auch die ersten Seiten wurden nicht ausgedruckt. Seither scheinen die Daten nicht mehr bearbeitbar, obwohl sie im Worksheet noch immer sichtbar sind. Ich lege nochmals den aktuellen Stand des Makros bei (sorry, wie kann man ein Makro ohne das Worksheet hochladen?):

Sub Makro1()
'Application.ScreenUpdating = False
'

Sub DruckenProSpalte()
Dim Kauf3b As Worksheet
Dim lngC As Long, lngLC As Long
Set Kauf3b = ActiveSheet
ActiveSheet.PageSetup.Orientation = xlPortrait
ActiveSheet.PageSetup.TopMargin = Application.CentimetersToPoints(2)
ActiveSheet.PageSetup.BottomMargin = Application.CentimetersToPoints(1)
lngLC = Cells(Columns.Count, 1).End(xlToLeft).Column 'Letzte Spalte der Zeile 1 ermitteln
If MsgBox("Sollen jetzt alle Spalten EINZELN gedruckt werden ?", _
vbYesNo + vbQuestion) = vbYes Then
For lngC = 3 To lngLC 'Alle Spalten ab Spalte 3
Columns("3:" & lngLC).Hidden = True 'Zuerst ALLE Spalten ab Spalte 3 ausblenden
Columns(lngC).Hidden = False 'nur aktuelle Spalte einblenden
ActiveSheet.PrintOut 'Aktuelles Blatt ausdrucken
Next
End If
'Columns("3:" & lngLC).Hidden = False 'ALLE Spalten ab Spalte 3 wieder einblenden
'Application.ScreenUpdating = False
End Sub

Vielen Dank für einen guten Tipp und freundliche Grüsse
Fritz
Anzeige
AW: spalte nach spalte ausdrucken
17.11.2016 19:07:49
Werner
Hallo Fritz,
With ActiveSheet
.Range(.Columns(3), .Columns(lngLC)).Hidden = True
End With
Gruß Werner
AW: spalte nach spalte ausdrucken
17.11.2016 19:21:30
Werner
Hallo Fritz,
=False natürlich, du willst ja wieder einblenden
Gruß Werner
AW: Spalte nach Spalte ausdrucken
17.11.2016 21:29:16
Fritz
Guten Abend Werner
Ich habe weiterhin keinen Erfolg mit meinem Makro. Die Antwort betreffend die Hidden-Eigenschaft verunsichert mich. Hidden=True macht nach meiner Meinung die betreffenden Spalten unsichtbar. Entsprechend müsste die Sichtbarmachung Hidden=False heissen. Im zweiten E-Mail ist dies jetzt wohl ok, auch wenn der code noch nicht korrigiert ist. Unklar bleibt, weshalb beim printout-Befehl beim Drucker nichts passiert. Ein anderes Makro am gleichen Ort druckt fehlerfrei. Oder ist doch etwas am Zusammenhängen von Columns("3:" & lngLC).Hidden nicht in Ordnung? Die Lösung wäre sonst so elegant, wenn sie nur funktionieren würde. Oder gibt es wohl noch andere einfache Lösungen? Eine Lösung habe ich noch entwickelt, bei der ich aber jede Spalte zuerst markieren muss. Gäbe es da eine VBA-Lösung, die dieses Markierung über eine Schleife besorgen würde?
Nochmals das Makro mit dem Verstecken der Spalten im neusten Stand:
Sub Makro1()
'Application.ScreenUpdating = False
'

Sub DruckenProSpalte()
Dim Kauf3b As Worksheet
Dim lngC As Long, lngLC As Long
Set Kauf3b = ActiveSheet
ActiveSheet.PageSetup.Orientation = xlPortrait
ActiveSheet.PageSetup.TopMargin = Application.CentimetersToPoints(2)
ActiveSheet.PageSetup.BottomMargin = Application.CentimetersToPoints(1)
lngLC = Cells(Columns.Count, 1).End(xlToLeft).Column 'Letzte Spalte der Zeile 1 ermitteln
If MsgBox("Sollen jetzt alle Spalten EINZELN gedruckt werden ?", _
vbYesNo + vbQuestion) = vbYes Then
For lngC = 3 To lngLC 'Alle Spalten ab Spalte 3
Columns("3:" & lngLC).Hidden = True 'Zuerst ALLE Spalten ab Spalte 3 ausblenden
Columns(lngC).Hidden = False 'nur aktuelle Spalte einblenden
ActiveSheet.PrintOut From:=1, To:=1, Copies:=1 'Aktuelles Blatt ausdrucken
Next
End If
With ActiveSheet
.Range(.Columns(3), .Columns(lngLC)).Hidden = False
End With
'Application.ScreenUpdating = False
End Sub

Anzeige
aber jetzt
18.11.2016 14:10:02
Michael
Hi,
hier das akutalisierte Makro:
Option Explicit
Sub DruckenProSpalte()
Dim lngC As Long, lngLC As Long
With ActiveSheet
.PageSetup.Orientation = xlPortrait
.PageSetup.TopMargin = Application.CentimetersToPoints(2)
.PageSetup.BottomMargin = Application.CentimetersToPoints(1)
lngLC = .Cells(1, .Columns.Count).End(xlToLeft).Column 'Letzte Spalte der Zeile 1 ermitteln
If MsgBox("Sollen jetzt alle Spalten EINZELN gedruckt werden ?", _
vbYesNo + vbQuestion) = vbYes Then
.Range("D:D").Resize(, lngLC - 2).EntireColumn.Hidden = True
.PrintPreview ' hier die erste mit A:C ausdrucken, dann erst Schleife:
For lngC = 4 To lngLC 'Alle Spalten ab Spalte 3
.Columns(lngC - 1).Hidden = True
.Columns(lngC).Hidden = False 'nur aktuelle Spalte einblenden
.PrintPreview
' .PrintOut From:=1, To:=1, Copies:=1 'Aktuelles Blatt ausdrucken
Next
End If
.Range("A:A").Resize(, lngLC).EntireColumn.Hidden = False
End With
End Sub

Bei der Ermittlung der lngC hattest Du Spalten und Zeilen vertauscht: bei cells() ist die erste Angabe die ZEILE.
Ich habe es jetzt so verstanden, daß die Spalten AB immer sichtbar sein sollen und zusätzlich je eine Spalte ab C, also ABC, ABD, ABE usw.
Falls Du nur AB, AC, AD usw. haben möchtest, änderst Du range("D:D") auf range("C:C") und lngC=4 auf lngC=3 ab.
Ich habe natürlich das .Printout auskommentiert und durch .PagePreview ersetzt.
Die Datei https://www.herber.de/bbs/user/109537.xlsm enthält beide Varianten.
Schöne Grüße,
Michael
Anzeige
AW: aber jetzt
18.11.2016 19:00:00
Fritz
https://www.herber.de/bbs/user/109541.xlsx
Guten Abend Michael
Endlich komme ich dazu zurückzuschreiben. Vorerst gewaltigen Dank für das modifizierte Makro mit dem Beispiel. Dieses funktioniert mit Deinem Worksheet bei mir tadellos. Wenn ich aber mein Worksheet Kauf3b lade und mit dem Makro den spaltenweisen Ausdruck starte, kommt ein Laufzeitfehler 1004. Ich bin ziemlich am Ende meiner Weisheit. Ist es wohl, weil die auszudruckenden Felder relativ komplexe Formeln beinhalten?
Ich habe dann versucht, das Worksheet zu übermitteln, habe aber keine Chancen, die relativ engen Grenzen einzuhalten. Schliesslich musste ich mich auf eine Kopie einer Ecke beschränken: https://www.herber.de/bbs/user/109541.xlsx . Das Original ist für eine 100x350 Matrix festgelegt.
Es geht um ein Programm, das ich seit Jahren für Auktionen für meinen Briefmarkensammlerverein verwende. Da wurde der Wunsch geäussert, man möchte für die in den Spalten aufgeführten Käufe einen schriftlichen Beleg ausdrucken. Eben einen spaltenweisen Ausdruck der Resultatmatrix. Das Programm funktioniert so, dass für jedes ersteigerte Los der Preis und die Käufernummer eingegeben werden. Über diverse Matrixfunktionen werden die Käufe für jeden Bieter ontime sortiert und in die im Bild gezeigte Anordnung je Käufer gebracht. Aufgeführt werden nur die Bieter, die etwas gekauft haben. Für die Käufer würde der Ausdruck der Spalte A und die dem Käufer zugehörige Spalte genügen. Alle Totale für den Käufer sind in der oberen Zeilen seiner Spalte schon berechnet.
Ob ich wohl das Ziel eines Ausdrucks noch erreiche? Mit dem Makrostart sollten gleich alle Käufer mit einem Ausdruck bedient werden können. Falls noch Ideen bestehen, wie ich den Druck doch noch in Gang bringen könnte, wäre ich sehr, sehr dankbar! Und sammelt jemand bei Euch Briefmarken? Vielen Dank und freundliche Grüsse
Fritz
Anzeige
Du bist lustig...
18.11.2016 20:54:04
Michael
Hallo Fritz,
wie soll ich das mit einer GRAFIK testen? Lade bitte eine echte Tabelle hoch.
Sag, kann es sein, daß Du in einer Zeile mehrere Zellen nebeneinander verbunden hast?
Schönen Abend,
Michael
AW: Du bist lustig...
18.11.2016 21:49:52
Fritz
Hallo Michael
Das ist ja mein Problem: Die kleinste gekürzte Version ist 1100kB gross und kleiner geht es ohne grosse Umbauten nicht. Aber nur 300kB sind gestattet. Gibt es andere Möglichkeiten des uploads?
Verbundene Felder gibt es keine. Das scheint nur so, weil ich einfach die Ecke kopiert habe. Und dabei gibt es unter W10 neuerdings ein zusammenhängendes Bild (pdf-artig), weshalb auch immer. Aber vielleicht gibt es eine Einstellung, mit der dies vermieden werden könnte. Aber testen könnte man damit ohnehin nicht. Mir geht es nur darum, zu zeigen was ich eigentlich machen möchte. Ein Test ist nur möglich, wenn ich eine Originaldatei senden kann.
Gruss Fritz
Anzeige
AW: Du bist lustig...
19.11.2016 02:29:50
Fritz
Guten Tag Michael
Ich habe doch tatsächlich noch ein Mini-Sheet erstellen können, das alle entscheidenden Elemente enthält, funktioniert und nicht zu gross ist für den upload:

Die Datei https://www.herber.de/bbs/user/10954t3.xlsm wurde aus Datenschutzgründen gelöscht


In Kauf können Preis und Käufer beliebig verändert werden. Zwischen Kauf und Kauf3b finden die Matrixumwandlungen statt, die entsprechenden 3 Worksheets sind verborgen. In Kauf3b kann die Schaltfläche Drucken für den Ausdruck benützt werden. Excel ist genial ...
Ein kleines Detail stört noch: weshalb fehlt beim Bieter 2 die Linie zwischen den Zeilenbezeichnungen und den Daten? Wie kriegt man die wohl hin? Und wie kann man in den leeren Feldern die Nullen verschwinden lassen?
Nochmals vielen Dank für die Hilfe. Ich hoffe, dass der Ausbau auf die 100x60 Matrix dann doch noch funktioniert.
Viele Grüsse
Fritz
aus Bolligen bei Bern
Anzeige
AW: Du bist lustig...
19.11.2016 15:11:10
Michael
Hallo Fritz,
da warst Du ja fleißig...
Das mit der Linie ist relativ einfach: die dicke Linie ist offensichtlich Bestandteil der Formatierung der Spalte B, "verstärkt" noch durch die Fixierung.
Ich habe einfach die Formatierung der Spalte D (mit dem Pinsel zur Formatübertragung) auf die Spalte C kopiert, dann ist der Strich da. Oder markiere die Spalte C und formatiere die "Linie links".
Das mit den 0en ist so eine Sache. Man kann sie einerseits wegformatieren ...
benutzerdefinierte Formatierung: 0;-0;;@

... aber dann ist eine evtl. tatsächlich vorhandene 0 auch weg.
Ich bevorzuge es in solchen Fällen, in die leeren Zellen (auf die =INDEX zugreift) je ein Leerzeichen einzutippen: dann wird das übernommen und sieht auch aus wie "leer".
Ansonsten scheint das Makro ja zu laufen. Ich hatte übrigens vergessen, zwischen dem ersten .Printview und der For-Zeile noch das .Printout einzufügen: das kopierst Du bitte einmal vor die Schleife...
Schöne Grüße aus Franken,
Michael
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige