Supportnet Computer
Planet of Tech

Supportnet / Forum / Tabellenkalkulation

Mit Excel VBA Namen für Bereiche vergeben





Frage

Das folgende Makro vergibt 1 Namen für 1 Bereich. Ich möchte jedoch Namen für viele Bereiche vergeben. Die Namen sollen Block2, Block3, Block4 ... usw. bis Block195 heißen. Die Bereiche dazu sind alle gleich groß und schließen aneinander an. Für Block3 ist der Bereich B384 bis Z574. Ich schaffe es leider nicht, die entsprechenden Variablen zu deklarieren und einzubauen. Ich hoffe, es kann mir jemand helfen, denn ich würde mir ungeheuer viel Arbeit sparen. Sub BereichBenennen() Dim Bereich As Range Worksheets("rohMW").Activate Set Bereich = Sheets("rohMW").Range("B193:Z383") ActiveWorkbook.Names.Add Name:="Block2", RefersTo:=Bereich End Sub

Antwort 1 von fürLau

Hallo, Oma

Frohe Pfingsten
Nachfolgendes Makro sollte Dein Anliegen erfüllen:


Sub Bereiche_benennen()
Dim bereich As Range, i  As Long, zaehler%
zaehler = 1
Worksheets("rohMW").Activate
For i = 2 To 37245 Step 191
 Debug.Print i
 Set bereich = Sheets("rohMW").Range("B" & CStr(i) & ":Z" & CStr(i + 190))
ActiveWorkbook.Names.Add "Block" & Format(zaehler, "000"), RefersTo:=bereich
zaehler = zaehler + 1
Set bereich = Nothing
Next
End Sub


Gruß[h3]{[h1]Ó¤[sup...fürLau
Signatur wurde ganz und gar ohne SNTool erstellt.

Antwort 2 von Oma

Hallo fürLau,

Du bist der/die Größte. Das mit der dreistelligen Formatierung ist genial. Da habe ich die Bereiche in richtiger Reihenfolge untereinander. Es hat noch besser funktioniert als ich es mir vorgestellt habe.

Was ich nicht ganz verstanden habe ist der Befehl Debug.Print i. Darüber hinaus weiß ich auch nicht genau was CStr bedeutet. Und für mich auch verwunderlich, dass hinter Next kein i steht.

Irgendwann werde ich hoffentlich auch mal ein Makro alleine schreiben können. Vielleicht kannst Du mir ein gutes Nachschlagewerk empfehlen? Wobei ich natürlich dieses Forum sehr schätze und vor allem die Supermakros von Dir.

Herzlichen Dank und auch noch einen schönen Pfingstmontag von Oma.

Antwort 3 von fürLau

Hallo Oma,

Debug.print i war nur zur Entwicklung für mich wichtig.
Einfach um im Direktfenster die richtige Schrittweite der For..Next Schleife zu sehen. Kann Ersatzlos gelöscht werden.

Next i ist nicht (zwingend) erforderlich, da immer die innerste Schleife geNextet wird, in dem Fall gibt´s ja nur Eine. Aber zur besseren Lesbarkeit eigendlich sinnvoll. (*schäm*)

Ich habe mir Chistian Friedrich´s VBA mit Excel zugelegt - und schlage regelmäßig darin nach.
..und frohe Pfingsten

Antwort 4 von fürLau

Nachtrag
CStr = Convert to String - notwendig wenn eine Zahl als Text ausgegeben werden soll, weil die Argumente für das Range object "B378:Z574" eben Text ist.

Antwort 5 von Oma

Hallo fürLau,

herzlichsten Dank für die Erklärungen und den Buch-Tipp. Ich habe das Buch Excel-VBA von Markt und Technik. Die Beispiele sind o.k. Aber der Transfer hin zum eigenen Makro gelingt mir noch nicht ganz. Ich werde mir im Buchhandel das von Dir genannte Werk ansehen. Danke und einen schönen Tag.

Oma