2013-07-14 21 views
6

Warum das funktioniert folgende nicht:VBA Excel-Bereich() mit Zell Argumente

Range(Cells(1,1)).Value = 3

Cells(1,1) im Wesentlichen dasselbe wie mit A1 richtig sein soll?

(Ich weiß, dass ich nur Cells(1,1).Value = 3 tun könnte, aber ich bin nur neugierig, warum es nicht funktioniert.)

las ich den Eintrag MSDN und es zeigt, dass das erste Argument sein muss A1 Stil, aber so etwas wie dies funktioniert:

Range(Cells(1,1), Cells(2,3)).Value = 2

Völlig verwirrt.

Antwort

2

Wenn Sie die Cells-Eigenschaft verwenden möchten, um die Parameter des Bereichsobjekts anzugeben (wenn ich mich richtig erinnere - ich habe VBA seit einiger Zeit nicht mehr verwendet), müssen Sie effektiv zwei Argumente angeben.

Wenn Sie also ein Kreisobjekt verweisen möchten, dass nur eine Zelle hat, dann müssen Sie schreiben:

Range(Cells(1, 1), Cells(1, 1)).value = "Hello World" 
+0

Warum das ich aber keine Ahnung haben ... –

+0

Es ist nur verwirrend, weil es ihr widerspricht eigene Dokumentation, soweit ich das kann (sagt man muss A1 Style als erstes Argument verwenden). Ich denke, es ist nur eine dieser seltsamen Designentscheidungen, mit denen man leben muss. – user943870

+0

Nicht genau, wenn Sie in der Dokumentation nach unten scrollen, werden Sie sehen, dass es verschiedene Bedingungen gibt, wenn Sie die Cells-Eigenschaft verwenden ... In diesem Abschnitt wird der A1-Stil nicht erwähnt (offensichtlich wie bei der Cells-Eigenschaft)). –

12

Wenn Range mit einem einzigen Parameter verwendet wird, wird der Parameter als Bereichsnamen interpretiert .

Range(Cells(1,1)) 

ist die gleiche wie

Range(Cells(1,1).Value) 

So erhalten Sie ein Ergebnis nur der Wert von Cells(1,1) Verwendung ist

eine gültige Bereichsadresse in A1 Stil

Nur wenn zwei Bereichs Parameter übergeben werden Sie interpretierten die Ecken einer Reihe.

+0

+1 guter Beitrag Chris. – brettdj

+0

Gut, aber könnte es mit den Zellen (1,1) vollständiger sein. Adressbeispiel? – LuizAngioletti

+1

Bereich (Cells (1,1) .Value) gibt einen Fehler auf meinem Computer aus. Range (Cells (1,1) .Address) funktioniert jedoch. – user3032689

-2

Wenn "Zellen" verwendet werden, ist es erforderlich, Object.cells, , z. Application.cells (2,2) oder activeWorksheet.cells

+0

mehr Erklärung? – tod

3

Statt auf eine einzelne Zelle, wie dies mit Bezug:

Range(Cells(1,1), Cells(1,1)) 

können Sie schreiben:

Range(Cells(1,1).Address) 
1

Für eine einzelne Zelle ihre viel einfacher: die Standard-Zellen() -Funktion:

Cells(1,1) = "hello world" 

oder ein Blatt Zellen() Funktion:

Dim sht as Worksheet 
Set sht = Sheets("myworksheet") ' or: = Sheets(1) 
sht.Cells(1,1) = "hello world" 

Für einen Bereich müssen Sie zwei Parameter verwenden, wie in den anderen hier angegebenen Antworten erläutert. Der Vorteil ist jedoch, dass Sie eine ganze Reihe von Feldern auf einen Wert setzen können. Und Sie können hinter den Kulissen an einem Blatt arbeiten, das nicht "Aktiv" ist.Zum Beispiel:

Const colRand = 4 
Const colDiff = 5 

Dim sht as Worksheet, rngHi As Range, rngRand As Range, rngDiff As Range 
Set sht = Sheets("myworksheet") ' or: = Sheets(1) 

Set rngHi = sht.Range(sht.Cells(1,1), sht.Cells(3,3) 
rngHi = "hello world" 

Set rngRand = sht.Range(sht.Cells(1,colRand), sht.Cells(8,colRand) ' column 4, rows 1-8 
rngRand = "=RAND()" 

Set rngDiff = sht.Range(sht.Cells(2,colDiff), sht.Cells(8,colDiff) ' column 5, rows 2-8 
' using FormulaR1C1 in case the sheet isn't set to use that type of formula 
Set rngDiff.FormulaR1C1="=RC[-1] - R[-1]C[-1]" ' on previous columnn, diff between this row and previous row 

Erläuterung:

Die Zellen Funktion erhält entweder:
einen String-Parameter - in dem Sie den A1_And_Colon Stil Bereich
oder zwei Zellparameter angeben - die Anfangszelle des Bereichs und der Endzelle.

So um den Bereich zu setzen mit ‚Zellen‘ Sie beide Zellen durch ein Komma getrennt geben müssen:

Range(Cells(1,1), Cells(1,1)) = "hello world" 
Range(Cells(2,2), Cells(3,4)) = "you cannot square around, but you can round a square" 
Sheets(1).Cells(5,5) = "=Round(Sqrt(5))" 
Verwandte Themen