Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Code verbessern

Forumthread: Code verbessern

Code verbessern
04.11.2024 19:11:11
Thomas
Hallo zusammen,
kann mir jemand helfen, ich habe ein Makroaufgezeichnet der zuerst die Spalte A und D löscht.
Dann kopiert er die Zelle L2 und fügt es in A2 ein, dann L3 zu D2
L4 = A3
L5 = D3
L6 = A4
L7 = D4
anschließend wird es gedruckt und dann gehts es wieder "vom Anfang" ( Außer die Spalte L )
A und D löschen
L8 = A2
L9 = D2
L10=A3
L11=D3
L12=A4
L13=D4
drucken

In Spalte L befindet sich eine Liste die alle 6 Wörter in A bis D einfügt. Wichtig ist, das die formation von A bis D nicht geändert werden darf.

Wäre sowas möglich ?
Es wären ca. 2300 Zielen in Spalte L

Dankeschön
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code verbessern
04.11.2024 19:47:23
Yal
Hallo Thomas,

zuerst ein Dry-Run:
Sub Übertragen_test()

Dim i As Long
Dim j As Long

With Worksheets("Tabelle1")
For i = 2 To 20 Step 6 '.Cells(Rows.Count, "D").End(xlUp).Row Step 6
.Range("L4:L13").ClearContents
For j = 0 To 2
Debug.Print .Cells(2 + j, "A").Address(0, 0) & " = " & .Cells(i + 2 * j, "L").Address(0, 0)
Debug.Print .Cells(2 + j, "D").Address(0, 0) & " = " & .Cells(i + 2 * j + 1, "L").Address(0, 0)
Next
Next
End With
End Sub

dann kommt in der Direktfenster:
A2 = L2
D2 = L3
A3 = L4
D3 = L5
A4 = L6
D4 = L7
A2 = L8
D2 = L9
A3 = L10
D3 = L11
A4 = L12
D4 = L13
A2 = L14
...
sieht gut aus.
Dann der richtige Run:
Sub Übertragen()

Dim i As Long
Dim j As Long

With Worksheets("Tabelle1")
For i = 2 To .Cells(Rows.Count, "D").End(xlUp).Row Step 6
.Range("L4:L13").ClearContents
For j = 0 To 2
.Cells(2 + j, "A").Value = .Cells(i + 2 * j, "L").Value
.Cells(2 + j, "D").Value = .Cells(i + 2 * j + 1, "L").Value
Next
DoEvents
ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
Next
End With
End Sub


Vielleicht solltest Du zuerst den For i = .. To .. zuerst begrenzen. 2300 / 6 sind 384 Seiten Papier, die eventuell um sonst gedruckt werden...
For i = 2 To 32 Step 6 => 5 Seiten. Geht.
For i = 33 To 93 Step 6 => 10 Seiten. usw.

VG
Yal
Anzeige
AW: Code verbessern
05.11.2024 09:15:16
MCO
Hallo Thomas!

Ich hab deine Aufgabenstellung etwas anders verstanden als YAL.

Füllen A-D, Ausdruck.

Allerdings seh ich das mit den 100en Seiten auch so wie Yal, daher hab ich den Ausdruck einfach mal gewandelt in pdf-Ausgabe. Den Druckbereich hab ich eingeschränkt.
Dennoch hab ich die Zeile mit dem Papierausdruck stehen lassen.

Probier es mal aus:
Sub Übertragen()

Dim i As Long
Dim j As Long
Dim neu_name As String
Dim abl_Pfad As String

abl_Pfad = ThisWorkbook.Path

With Worksheets("Tabelle1")
Application.ScreenUpdating = False

With .PageSetup
.PrintArea = "$A$2:$D$4"
.FitToPagesWide = 1
.FitToPagesTall = 1
End With

.Range("A2:D4").ClearContents
For i = 2 To .Cells(Rows.Count, "L").End(xlUp).Row Step 6
For j = 0 To 2
.Cells(2 + j, "A").Value = .Cells(i + 2 * j, "L").Value
.Cells(2 + j, "D").Value = .Cells(i + 2 * j + 1, "L").Value
Next

neu_name = Range("A2") & " - " & Range("D4")
DoEvents
'.PrintOut Copies:=1, Collate:=True, IgnorePrintAreas:=False
.ExportAsFixedFormat xlTypePDF, abl_Pfad & "\" & neu_name, , , , , , 0
Next i
End With

Shell "explorer.exe " & abl_Pfad, vbNormalFocus
End Sub


Gruß, MCO
Anzeige
AW: Code verbessern
05.11.2024 09:40:39
Yal
Gute Idee mit den PDF: man kann anschliessend die Dateien im Explorer markieren (Strg+a für "alle"), rechtsklicken und "Drucken" wählen.

VG
Yal
AW: Code verbessern
05.11.2024 09:16:00
Yal
Hallo Thomas,

ja, es gibt eine gravierende, aber sehr einfache Fehler im Code.
Idealerweise lass ich dich selber drauf kommen.
- öffne VBA
- öffne die sog. Lokalfenster (Menü "Ansicht", "Lokalfenster")
- platziere dein Kursor irgendwo auf die Sub
- starte den Lauf im Schritt-Modus mit F8 und jede weitere Schritt in F8 und schaue dabei was die Stände der Variablen.

Du wirst sehen, dass es schnell vorbei geht. Warum?
Starte nochmal in Schritt-Modus, aber vor jeder Anweisungszeile, lese die Zeile. Du kannst es laut, auf Deutsch oder noch besser dein Gummi-Ente die Anweisung erklären (Rubber-Duck-Debugging). So kommst Du megaschnell in dem Verstand von VBA.

An mancher Stellen macht man Abkürzungen. Vielleicht ist hier und da hilfreich, diese Abkürzung zuerst in einer Variable zwischenzuspeichern, um über den Lokalfenster sichtbar zu machen...

Es gibt auch einen Fehler beim Löschen:
.Range("A2:A4,D2:D4").ClearContents
ist richtig!

VG
Yal
Anzeige
AW: Code verbessern
06.11.2024 05:55:17
Thomas
Der Code hat funktioniert.
Danke an Alle :-)
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige