AW: .VALUE oder nicht .VALUE
13.06.2007 12:33:09
Dan
Hallo Daniel,
also
value1 = Cells(1,1)
liefert mir das gleiche Ergebnis wie
value1 = cells(1,1).value
...es sieht so aus, dass Cells(1,1) das selbe ist wie Cells(1,1).Value....aber nicht ganz :-). Auch sieht es so aus, als ob Value die default property vom Range wuerde....auch das ist wahrscheinlich nicht ganze Wahrheit. Siehe den Code Sample unten.
auch im ersten Fall wird value1 nicht zum Objekt, sondern es wird brav nur der Wert der Zelle 1,1 übergeben.
... so kann value1 nicht zum Objekt werden. Wenn man eine Objekt Referenze in eine Variable speicher will, muss man den Set Statement benutzen:
Set vlaue1 = cells(1,1) ... so wird value1 die Referenze auf ein Range Objekt beinhalten.
Sub test2()
Dim allCellsOnActiveSheet As Range
Set allCellsOnActiveSheet = Cells
' hier gibt man ein Wert in den Range A1 ein, ohne der Name der Property zu schreiben,
' also hir wird die default property benutzt:
allCellsOnActiveSheet(1, 1) = "Test ... ohne Value"
' es muss eine default property geben, sonnst heatten wir warscheinlich ein Error bekommen:
' error 438: Object does not support this property of method
' laut Excel help ist die default property vom Range die Property Item:
' ... Because the Item property is the default property for the Range object ...
' viele Leute meinen aber, dass default property vom Range ist die Property Value
' ... ich habe es mir auch gedacht :-)
' aber wenn man in den Object browser geht, und die 'Hidden members' sich anzeigen laesst,
' sieht man, dass beides nicht stimmt.
' Als default property ist da die hidden _Default property markiert (blaues punkt ueber der _
Ikone der Property)
' Ich vermute:
' also wenn man allCellsOnActiveSheet(1, 1) schreibt, ruft man in Wirklichkeit volgendes an: _
' (Die _Default property aendert die Koordinaten und dann aendert den Wert)
allCellsOnActiveSheet.[_Default](1, 1) = "Hallo .... hier _Default Property of Range"
' auch hier muss erstmanls _Default property gerufen werden, die _Default Property
' aendert nur die Koordinaten, und dann wird die Value gerufen
allCellsOnActiveSheet(1, 1).Value = "Test ... mit Value"
' Wenn ich mir das ganze jetzt ansehe, bin ich mir nicht sicher ob sich der Aufwand gelohnt _
hat.
' Wenn interressiert das schon, dass da eine _Default property ist :-)
' zum Schluss noch etwas. So ist es am klarsten: nimm eine Item aus allen Zellen und _
aendere dessen Wert
' ... aber so ist es auch langsam, weil die methoden Item und Value dabei gerufen werden...
allCellsOnActiveSheet.Item(1, 1).Value = "Komplett ... "
End Sub
Gruss Dan, cz