Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hi Uwe,
bei mir geht es auch um meine Variante mit Names und nicht die mit PrintArea. Ich versuche ja immer zu vermitteln, das man mit Aufzeichnen auch einiges lösen kann, was in dem Fall eben nicht passt.
Hi Stefan,
in der Beispieldatei gibt es doch nur ein Blatt, oder hab ich da einen Upload mit mehreren übersehen? Als Vorlage fasse ich die Teile / Druck-"Seiten" des Blattes auf, die nur in Spalte A vorgefüllt sind. Für ein anderes aktives Blatt müsste dann eine andere Datei offen sein.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 11.04.2014
Version(en): Office 2007
Hallo André, (18.06.2020, 09:27)schauan schrieb: in der Beispieldatei gibt es doch nur ein Blatt, oder hab ich da einen Upload mit mehreren übersehen? Wenn man den Code vom TE anschaut, würde ich das verneinen (ich habe einige Zeilen gelöscht, die für das Verständnis nicht entscheidend sind) Code: Private Sub CommandButton1_Click() 'Variablendeklarationen - Integer (%) Dim icnt1% Dim sheet As Worksheet
'Zieldate oeffnen Workbooks.Open Filename:="Pfad" 'Qelldatei wieder aktivieren Windows("Tabelle1.xlsm").Activate
'Mit dem Zielblatt With Workbooks("Tabelle1").Sheets("Test1") 'mit der ersten lleren Zelle (anhand Spalte 7) With .Cells(.Cells(.Rows.Count, 7).End(xlUp).Row + 1, 7) 'Eintraege der Listbox uebernehmen, Spalten 4 bis 7 - Zaehlung beginnt bei 0! .Value = ListBox1.List(icnt1, 0) .Offset(, 1) = ListBox1.List(icnt1, 1) '2 .Offset(, 4) = ListBox1.List(icnt1, 2) '3 'mit diesen Code Abschnitt wird der Label bzw. Labels gef?llt Set sheet = ActiveWorkbook.Sheets("Label") 'label zellen sheet.Cells(Rowmultier + 1, multiplier) = ListBox1.List(icnt1, 12) sheet.Cells(Rowmultier + 2, multiplier) = ListBox1.List(icnt1, 1) 'Ende mit der ersten lleren Zelle (anhand Spalte 6) End With 'Ende Mit dem Zielblatt End With 'Ende Wenn Zeileneintrag gewaelt wurde, dann End If Next Unload Me Call DruckBereich Tabelle1.PrintPreview Dim labelrange As Range Set labelrange = sheet.Range("B1:D1000,G1:I100") labelrange.ClearContents 'Zieldatei aktivieren Application.ScreenUpdating = True Application.Calculation = xlCalculationAutomatic Windows("Tabelle1").Activate End Sub
er öffnet eine Datei, aktiviert wieder die Makrodatei, und da sind es für mich zwei Tabellenblätter.
Gruß Stefan Win 10 / Office 2016
Registriert seit: 03.10.2018
Version(en): 2016
18.06.2020, 11:57
(Dieser Beitrag wurde zuletzt bearbeitet: 18.06.2020, 11:57 von Pirat2015.)
Hallo Zusammen,
ja die Labels befinden sich in der andere Tabelle aber in derselben Excel Datei. Bsp. Datei war nur um zu verstehen wie die Label vorlagen aufgabt sind.
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
18.06.2020, 12:48
(Dieser Beitrag wurde zuletzt bearbeitet: 18.06.2020, 12:48 von Kuwer.)
Hi André, (18.06.2020, 09:27)schauan schrieb: bei mir geht es auch um meine Variante mit Names und nicht die mit PrintArea. Ich versuche ja immer zu vermitteln, das man mit Aufzeichnen auch einiges lösen kann, was in dem Fall eben nicht passt. ich hoffte, dass Du selber erkennst, wie gruselig Deine Variante ist. Druckbereiche sind nämlich lokale Namen. Sie beginnen also mit dem Blattnamen und anschließendem Ausrufezeichen. Enthält der Blattname aber z.B. Leerzeichen, kommen noch Hochkommas drumherum. Und dann kommt erst der eigentliche lokalisierte Name. Wenn ich das Festlegen des Druckbereiches aufzeichne, wie Du es ja in #86 empfiehlst, erhalte ich so etwas: ActiveSheet.PageSetup.PrintArea = "$B$2:$C$3" Da ist der sich dahinter verbergende Name unwichtig. Gruß Uwe
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hi Uwe,
das sind eben noch die alten Hackerfinger. Zwei Wege gibt's. Ich kann Druckbereich eben als Bereichsnamen eingeben und der ist dann auch nicht nur ein so benannter Bereich sondern ein Druckbereich, oder ich gehe oben über den Reiter ... Nur der eine Weg zeichnet einen im ersten Moment unbrauchbaren code auf, der mit Anpassung aber auch lauffähig ist.
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
18.06.2020, 13:48
(Dieser Beitrag wurde zuletzt bearbeitet: 18.06.2020, 13:48 von Kuwer.)
HiAndré, (18.06.2020, 13:08)schauan schrieb: Nur der eine Weg zeichnet einen im ersten Moment unbrauchbaren code auf, der mit Anpassung aber auch lauffähig ist. dann zeige doch bitte die richtige Anpassung. Du hattest beim Aufzeichnen schon einen gravierenden Fehler gemacht! Gruß Uwe
Registriert seit: 10.04.2014
Version(en): 97-2019 (32) + 365 (64)
Hallöchen, hier mal ein code, der in allen Blättern prüft, ob in Spalte B mehr steht als nur bis Zeile 1. Wenn ja, wird das Blatt in eine Liste genommen, der Druckbereich für dieses Blatt festgelegt und am Ende die betroffenen Blätter selektiert. Wenn man dann in die Seitenvorschau geht und daraus druckt, sollten auch nur die betroffenen / selektierten Blätter gedruckt werden. Ob die Daten korrekt in den Blättern stehen hab ich allerdings immer noch nicht angeschaut. Wenn die Labeltabelle eines Blattes komplett gedruckt werden soll, ohne Einstellung des Druckbereichs für dieses Blatt auf die gefüllten Daten, kann man die Codezeile auch auskommentieren bzw. löschen, siehe code unter "Druckbereich auf Blatt festlegen" Wenn noch andere Blätter in der Datei sind außer "Label ...", kann man noch eine Prüfung hinzufügen, die nur Blätter mit Label am Anfang berücksichtigt. Uwe, siehe #103 Code: Sub BlaetterZumDrucken() 'Variablendeklarationen Dim arrTemp, blaetter As Worksheet, iCnt% 'Array dimensionieren ReDim arrTemp(Sheets.Count) 'Zaehler festlegen iCnt = -1 'Schleife ueber alle Blaetter For Each blaetter In Worksheets 'Mit einem Blatt With blaetter 'Druckbereich auf dem Blatt festlegen 'Wenn gefullter Bereich in SPalte B min. bis Zeile 2 geht, denn If .Cells(Rows.Count, 2).End(xlUp).Row > 1 Then 'Blattzaehler hochsetzen iCnt = iCnt + 1 'Blattname in Array uebernehmen arrTemp(iCnt) = .Name 'Druckbereich auf Blatt festlegen .PageSetup.PrintArea = "='" & .Name & "'!" & .Range("A1:I" & .Cells(Rows.Count, 2).End(xlUp).Row).Address 'Ende Wenn gefullter Bereich in SPalte B min. bis Zeile 2 geht, denn End If 'Ende Mit einem Blatt End With 'Ende Schleife ueber alle Blaetter Next 'Wenn min ein Blatt betroffen ist, dann If iCnt >= 0 Then 'Array auf Anzahl betroffener Blaetter reduzieren ReDim Preserve arrTemp(iCnt) 'Blattliste Selectieren Sheets(arrTemp).Select 'Ende Wenn min ein Blatt betroffen ist, dann End If End Sub
. \\\|/// Hoffe, geholfen zu haben. ( ô ô ) Grüße, André aus G in T ooO-(_)-Ooo (Excel 97-2019+365)
Folgende(r) 1 Nutzer sagt Danke an schauan für diesen Beitrag:1 Nutzer sagt Danke an schauan für diesen Beitrag 28
• Pirat2015
Registriert seit: 29.09.2015
Version(en): 2030,5
Gibt es hier eine Endlosschleife ?
Registriert seit: 17.04.2014
Version(en): MS Office 365(32)
Hi André, (18.06.2020, 16:21)schauan schrieb: Uwe, siehe #103 der ist falsch, auch mit Stefans Korrektur/Ergänzung. Gruß Uwe
|