Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1812to1816
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

Prozess im Makrorecorder in Nachgang anpassen

Prozess im Makrorecorder in Nachgang anpassen
22.02.2021 15:04:12
Melpomene
Hallo,
ich habe mir ein VBA Buch gekauft und versuche mir gerade peu-a-peu alles selbst beizubringen - vieles habe ich geschafft. Vor allem Dank des Makrorecorders.
Nun habe ich ein Problem. Ich habe alle Funtionen und Prozesse, die ich benötige für eine spezielle Tabelle gemacht mit 8017 Zeilen. Nun habe ich jedoch andere Tabellen mit teilweise 5000 oder mehr als 40.000 Zeilen.
Wenn ich den Code ansehe, so steht nun z.B.:
ActiveSheet.Paste
Range("Y2").Select
Application.CutCopyMode = False
Selection.Copy
Range("Y2:Y8017").Select
Ich hab auch schon im Internet gesucht und folgendes gefunden für variable Spaltenenden....
rng=Sheets("Tabelle1").Range("Y2:Y2" & Sheets("Tabelle1".Range("Y" & Rows.Count).End(xlUP).Row)
Aber ich weiß nicht wie ich das in meinen Code implementieren soll.
Ich habe an andere Stelle die Formel eingegeben und diese Formel will ich quasi "nur runterziehen" bis zur letzten Zelle der Spalte.
Eine ganz andere Lösung wäre, dass ich statt der "8017" überall "50000" eingebe - aber das wäre doof, weil ich dann - egal wie klein die Liste ist, ewig viel Zeit für die Berechnung brauche.... aber das würde für alle Listen passen.
Vielen Dank für eure Hilfe!

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Prozess im Makrorecorder in Nachgang anpassen
22.02.2021 16:05:48
Daniel
Hi
die Implementierung in deinen Code würde so aussehen.
zu beachten wäre, dass man die letzte Befüllte Zeile in einer Spalte ermitteln muss, die auch Daten enthält.
btw, wenn man für den Recorder Zellen kopiert und einfügt, sollte man tatsächich das Excelspezifische "Inhalte Einfügen" des Kontextmenüs verwenden und das Einfügen über die Tasten EINFG oder STRG+V. (das sollte man eher für nicht Excelspezifische Inhalte verwenden, wie Bilder).
also in deinem Fall würde das vielleicht eher so aussehen:
Range("Y2").Copy
Range("Y2:Y" & Cells(Rows.Count, 1).End(xlup).Row).PasteSpecial xlpasteall
wenn man das öfters braucht, dann speichert man sich die Zeilennummer in einer Variablen, die man dann einfach verwenden kann:
dim LetzteZeile as long
LetzteZeile = Cells(Rows.count1, 1).end(xlup).Row
Range("y2").Copy
Range("y2:y" & letzteZeile).PasteSpecial xlpasteall
btw Formeln kann man auch gleich direkt in alle Zellen eintragen.
das entspricht der Vorgehensweise, erst alle Zellen zu markieren, dann die Formel einzutragen und die eingabe mit STRG+ENTER abzuschließen.
Ist etwas weniger aufwendig, als erst nur eine Zelle zu befüllen und dann zu kopieren.
dh statt
Range("Y2").Formula = "=U2+Y2*W2"
Range("Y2").Copy
Range("Y2:Y1000").PasteSpecial xlpasteall

schreibt man
Range("Y2:Y1000").Formula = "=U2+Y2*W2"

Gruß Daniel
Anzeige
AW: Prozess im Makrorecorder in Nachgang anpassen
22.02.2021 17:43:40
Melpomene
Vielen Dank für die Hilfe.
Ich probiere es gleich heute Abend aus!
Ja, die letzte Zeile brauche ich öfter....
um es kurzzufassen, habe ich eine Tabelle mit etwa 15 Spalten (die sind fest) und variablen Zeilen (500 - 40000) je nach Abfragegröße....
Die 15 Spalten sind nochmals unterschiedlich zu bearbeiten... z.B. 2. Ziffer der Zahl aus Spalte A multipliziert mit der 4. Ziffer aus Spalte C usw. --- also ganz wirr und verrückt.
Am Ende kommt eine Tabelle mit Zellen heraus, die mit der Ursprungstabelle nichts mehr zu tun hat...
Ich hab 11 Makros mit dem Makrorecorder aufgenommen und die werden jetzt nach und nach immer separat angeklickt.
Das ist mein bescheidenes Ergebnis, weil ich zum einen ganz am Anfang ALLES in einem Schritt im Makrorekorder aufgenommen habe, was mit die Meldung gab, dass es zu lang war.... und ich jetzt immer wieder an einzelnen Makros arbeiten kann, weil immer was nicht passt.
Jetzt will ich meine Makros etwas bearbeiten - zumindest in dem winzigen Umfang wie ich es verstehe und kann (was nicht viel ist) - und dann versuche ich die wieder zusammenzusetzen - in höchstens 3 Makros, damit man nicht so viel klicken muss. ...
Ihr seht.... das ist sehr sehr kompliziert für mich --- daher vielen Dank für die Hilfe!!!!
Ich bin wirklich über dieses Forum sehr sehr dankbar!!!!
Liebe Grüße Mel
Anzeige
AW: Prozess im Makrorecorder in Nachgang anpassen
23.02.2021 07:45:11
GraFri
Hallo
Ich würde mit Array arbeiten. Die benötigten Daten kann man auf einem Rutsch aus der Tabelloe einlesen, sie dann bearbeiten und anschließend in die Tabelle zurückschreiben. Ist auch sehr schnell, da die Berechnung bzw. Änderungen im Arbeitsspeicher durchgeführt werden.
Für die letzte Datenzeile verwende ich folgende Routine:
Sub Letzte_Datenzeile()
' Aufruf mit Tabellenname und Spaltenindex
MsgBox letzteDatenZeile("Kassabuch", 3)
' oder mit Codename der Tabelle und Spaltenbuchstaben
MsgBox letzteDatenZeile(Tabelle1, "C")
End Sub
Public Function letzteDatenZeile(vWS As Variant, Optional Spalte As Variant = 1) As Long
Dim wS  As Worksheet
On Error GoTo PROC_ERR
Select Case UCase(TypeName(vWS))
Case "STRING"
Set wS = Worksheets(vWS)
Case "WORKSHEET"
Set wS = vWS
Case Else
GoTo PROC_ERR
End Select
With wS
letzteDatenZeile = .Cells(.Rows.Count, Spalte).End(xlUp).Row
End With
PROC_EXIT:
Exit Function
PROC_ERR:
letzteDatenZeile = -1
Resume PROC_EXIT
End Function
mfg GraFri
Anzeige
AW: Schleifen
22.02.2021 16:25:38
Fennek
Hallo,
bei so vielen Zeilen Code (5.000+) liegt die Vermutung nahe, dass man einiges in Schleifen zusammenfassen kann. Diese kann der Rekorder nicht bieten, sondern muss nachträglich programmiert werden.
mfg
AW: Schleifen
22.02.2021 17:00:28
Daniel
naja, Schleifen würde ich bei so vielen Zeilen eher vermeiden.
vom Recorder aufgezeichneter Code ist immer zu überarbeiten.
der VBA-Makrorecoder ist eben kein vollwertiger "Sprachübersetzer", sondern maximal als "Wörterbuch" zu verwenden, in dem man einzelne Wörter und Befehle nachschlagen kann, welches aber alleine noch keine vollwertigen Sätze liefert.
Gruß Daniel
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige