Und falls Reinhard das sieht: Ich bin immer noch nicht weiter
beim Definieren der Variablen!!!
Grüezi Niclaus,
ja ich sehe da ist maches zuviel und manches zuwenig 
Benutze bitte beim Code posten den pre-Tag, wird unterhalb des Eingabefeldes erläutert.
Hake in Extras–Optionen des VB-Editors das Feld „Variablendeklaration erforderlich“ an"
Select ist zu 99% überflüssig und schlecht zu lesen, raus mit allen Selects.
Wo genau hängst du fest bei der Variablendeklaration?
Dim asn as string
wenn es so benutzt wird:
asn = ActiveSheet.Name
Dim pos_a
oder
Dim pos_a as Variant
wenn es so benutzt wird:
pos_a = Range(„B7“)
Deine Schleife macht deinen Code sehr langsam.
Angenommen du hast 30000 Datenzeilen, stellst dich in A1 und klickst solange auf die Pfeil nach unten Taste bis du zur ersten freien Zelle in A kommst, das macht deine While-Schleife.
Nun gehe aber mal in eine beliebige freie Spalte, drücke Strg+Pfeil nach Unten Taste, dann Strg+Pfeil nach Rechts Taste.
Du bist nun in A65536 (bei Versionen vor 2007)
Dies erreichst du im Code mit
Range(„A“ & rows.count).select
(das Select ist nur zum Demonstrieren, fliegt gleich raus *gg*)
Cells(rows.count,1).select bzw. Cells(rows.count,„A“).select ist das Gleiche
Wenn man nun in A65536 steht und Strg+Pfeil nach Oben Taste drückt so ist man sofort in der untersten nicht leeren Zelle in A
Die Codeentsprechung dafür ist
Range(„A“ & rows.count).end(xlup).select
In meinem Code siehst du wie ich die Zeilennummer der untersten ersten freien Zelle in A durch einen Befehl ermittle:
Zei = Range(„A“ & rows.count).end(xlup).row + 1
Das ist natürlich zigfach schneller als eine Schleife.
Selbst wenn du die Bremse „Select“ wegläßt und nur eine Variable hochzählst:
Sub tt()
Dim Zei As Long
With Worksheets("Ausgangsbuch")
While .Range("A1").Offset(Zei, 0) ""
Zei = Zei + 1
Wend
.Range("A1").Offset(Zei, 0) = Range("B7")
.Range("A1").Offset(Zei, 1) = Range("G7")
.Range("A1").Offset(Zei, 2) = Range("G8")
End With
End Sub
Gruß
Reinhard