Hallo Andi,
eine allgemeine Erläuterung zum Select:
Der Makrorekorder ist nur begrenzt dazu fähig "vernünftigen" Code zu erzeugen. Er zeichnet genau die Schritte auf die der Nutzer tätigt, d.h. wenn der Nutzer eine Zelle anklickt, wird sie markiert / ausgewählt - das ist dieses Select.
Im Makro ansich ist das jedoch gar nicht notwendig, ja sogar hinderlich (mehr Aktionen die durchgeführt werden müssen = mehr Zeit, die in Summe benötigt wird, um das Makro abzuarbeiten).
Angenommen du kopierst (entspricht STRG + C) die markierten Zellen anschließend, dann stünde im vom Makrorekorder erzeugten Code:
1 2 | Range( "I3:I14" ). Select
Selection.Copy
|
Also zwei Schritte die du so durchgeführt hast - logisch. Allerdings geht das viel einfacher, nur weiß der Makrorekorder das nicht, bzw. er ist nicht fähig diese Vereinfachung (man könnte auch sagen: Optimierung) durchzuführen. Diese sieht so aus:
Man entfernt also die aufeinander folgenden Selection und Select und rückt beide Ausdrücke zusammen.
Ganz einfach, oder?
Wenn du jetzt mit verschiedenen Bereichen im Code arbeitest, ist es sinnvoll dafür Variablen zu deklarieren (Dim-Anweisung) und zu initialisieren (Set var = Range("I3:I14")).
Beispiel:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | Option Explicit
Public Sub Test
Dim rngBaustellen As Excel.Range
Dim rngBaustelle As Excel.Range
Set rngBaustellen = Worksheets( "Tabelle1" ).Range( "A3:I14" )
For Each rngBaustelle in rngBaustellen.Columns
rngBaustelle. Select
Stop
Next
End Sub
|
Anmerkung: Du hast etwas davon geschrieben, dass du Zellen verbindest. Das ist hier noch nicht berücksichtigt worden, da ich nicht weiß ob eine Baustelle aus einer oder mehreren Spalten besteht (verbundene Zellen machen zudem oft Ärger). Dementsprechen müsste man ggf. die For-Schleifen noch anpassen (wenn z.B. eine Baustelle immer 2 Spalten umfasst).
Das müsstest du dann noch näher erläutern.
Gruß
|