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

VBA-Schreibweise: [A1].Select

VBA-Schreibweise: [A1].Select
Günther
Hallo
Ich bin kürzlich über eine sehr kompakte Schreibweise zum Ansprechen von Zellen und Bereichen (aus einem Makro heraus) gestoßen. Neben dem bekannten Range("A1") oder Cells(1,1) stellen auch folgende Zeilen gültige Excel-VBA-Makro-Befehle dar:
[A1] = "Hallo!"
MsgBox [A1]
[A1:B3].Interior.Color = vbRed
Mich würde interessieren, ob diese Schreibweise irgendwelche Nachteile hat, denn in der üblichen Literatur und den meisten Makros wird (meines Wissens) standardmäßig meist nur mit Range und Cells gearbeitet.
Möglicherweise weiß auch jemand einen theoretischen Background, warum diese Schreibweise überhaupt existiert und funktioniert (z.B. „Kompatibilitätsmüll“ aus anno Schnee ö.ä.).
Grüße
Günther
AW: VBA-Schreibweise: [A1].Select
14.09.2011 18:50:24
mumpel
Hallo!
Diese Schreibweise ist nicht zu empfehlen, da zu langsam. Zellen sollten immer direkt referenziert werden. Also bitte vergiss diese Art der Programmierung sofort wieder.
Gruß, René
AW: VBA-Schreibweise: [A1].Select
14.09.2011 20:19:47
Günther
Hallo René,
Danke für die Info. Habs mal bezüglich Geschwindigkeit getestet und folgende Werte (im Vergleich zur Range-Anweisung) rausbekommen: (cells ist unwesentlich schneller als Range)
[A1] = "Hallo!" 'ca. 20% langsamer
[A1].Interior.Color = vbRed 'ca. 25% langsamer
[A1].select 'ca. 45% langsamer
Bei performancekritischen Makros sicher ein wesentliches Argument, aber bei den typischen Kurzmakros, die dann statt 1,5 Sekunden vielleicht 2 Sekunden dauern, scheint mir die langsamere Geschwindigkeit nicht so dramatisch ins Gewicht zu fallen.
Du schreibst, dass diese Schreibweise keine direkte Referenzierung der Zelle darstellt. Was meinst Du damit?
Grüße Günther
Anzeige
AW: VBA-Schreibweise: [A1].Select
14.09.2011 21:38:44
Gerd
Hallo Günther,
die eckigen Klammern stehen für Evaluate(Auswerten). Das wohl ein Relikt aus der xl4Makro-Zeit.
Kürzer ist nicht immer besser.
Gruß Gerd
AW: VBA-Schreibweise: [A1].Select
14.09.2011 23:47:25
Luschi
Hallo Excel-Fan's,
habe mehrfach folgende 3 Tests in Excel 2010 gemacht:

Sub test1()
Debug.Print Time
For i = 1 To 1000000
Evaluate ("[A" & i & "] = 9")
Next i
Debug.Print Time
End Sub
Sub test2()
Debug.Print Time
For i = 1 To 1000000
ActiveSheet.Range("B" & i) = 9
Next i
Debug.Print Time
End Sub
Sub test3()
Debug.Print Time
For i = 1 To 1000000
ActiveSheet.Cells(i, 3) = 9
Next i
Debug.Print Time
End Sub
Ergebnis:
test1: 14 ... 16 Sekunden
test2: 50 ... 55 Sekunden
test3: 40 ... 42 Sekunden
Bei mir ist also eindeutiger Testsieger die Prozedur 'test1' und kann deshalb Mumpels Aussage wegen der Langsamkeit von [A1] gegenüber Range("A1") nicht bestätigen.
Nachteil von [A1] : Es muß die richtige Tabelle aktiv sein
Vorteil von [A1] : Bei Verwendung von Arbeitsmappen-Bereichsnamen benötigt man keine weitere Referenzierung.
[meinName].Value = 12
kann also im Vba-Code an jeder Stelle so aufgerufen werden und der Wert wird in die richtige(n) Zelle(n) geschrieben. Wenn [meinName] den Zellbereich Workbooks("meineArbeitsmappe.xls").Worksheets("meineTabelle").Range("A1:A100") repräsentiert, dann steht in allen diesen Zellen der Wert '12'. Das funktioniert auch, wenn man diesen Vba-Code aus einem AddIn aufruft und in eine der geöffneten Arbeitsamappen gibt es diesen vergebenen Namen.
Was will man mehr.
Gruß von Luschi
aus klein-Paris
PS: mein Allerweltstest-PC:
Prozessor: E6600
RAM: 4 GB
BS: Windows7-32bit
Software: MS-Office 2010 Prof Plus
Anzeige
AW: VBA-Schreibweise: [A1].Select
15.09.2011 03:50:13
mumpel
Also doch schneller als immer behauptet wird?
Aber dennoch: Jeder Programmierer der was auf sich hält, nutzt diese alte Programmierweise nicht.
Falscher Test
15.09.2011 11:22:00
Rudi
Hallo,
in Test 1 ermittelst du ja nur, ob Ai=9 ist. In den anderen schreibst du 9 in die Zellen. Das ist doch was ganz anderes.
Gruß
Rudi
AW: Falscher Test
15.09.2011 11:36:59
Daniel
Genau so schauts aus, da werden völlig verschiedene Sachen mit einander verglichen.
ein Realistisches Szenario würde folgenden Befehl verwenden:
Schreiben: [A1] = 9 / Range("A1") = 9 / Cells(1,1) = 9
Lesen: x = [A1] / x = Range("A1") / x = Cells(1,1)
damit komme ich auf folgende Zeiten (bei 10.000 durchläufen)

schreiben:  [A1]    1,6328125
Range() 1,5078125
Cells() 1,4296875
lesen:     [A1]    0,140625
Range() 0,09375
Cells() 0,0625 

was klar gegen die [..]-Schreibweise spricht.
des weiteren kann man hier nicht mit Variablen arbeiten, was die Verwendung weiter einschränkt.
Gruß, Daniel
Anzeige
Richtig, Daniel & Rudi! Und das war schon aus ...
15.09.2011 15:20:37
Luc:-?
…den 1.Tests zu erkennen! Warum Luschi da überhpt Evaluate einsetzt und Mumpel dann noch darauf reinfällt, ist mir völlig schleierhaft!
Gruß Luc :-?
AW: Richtig, Daniel & Rudi! Und das war schon aus ...
15.09.2011 16:46:58
mumpel
Das ist mir auf Arbeit dann auch eingefallen. Im Beispiel des TO taucht Evaluate nämlich gar nicht auf.
Na dann iss ja jut ... ;-) Gruß owT
15.09.2011 22:48:48
Luc:-?
:-?

107 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige