2014-09-16 30 views
7

Ad esempio, nel seguente codice, Item e Cells sono intercambiabili:Qual è la differenza tra Range.Item e Range.Cells?

Dim rRange As Range 
Set rRange = ThisWorkbook.ActiveSheet.Range("A1") 

With rRange 
    Debug.Print .Item(1, 1).Value ' Outputs value of "A1" 
    Debug.Print .Cells(1, 1).Value ' Outputs value of "A1" 

    Debug.Print .Item(2, 1).Value ' Outputs value of "A2" 
    Debug.Print .Cells(2, 1).Value ' Outputs value of "A2" 
End With 

Nel riferimento sviluppatore, essi sono definiti come:

Range.Item Property (Excel)

ritorni un oggetto Range che rappresenta un intervallo con un offset sull'intervallo specificato .

~

Range.Cells Property (Excel)

Restituisce un oggetto Range che rappresenta le celle nell'intervallo specificato.

Osservazioni

Perché la proprietà Item è la proprietà predefinita per l'oggetto Range, è possibile specificare l'indice di riga e la colonna subito dopo che le cellule di parole chiave.

Da questa osservazione, vuol dire che è in realtà un Cells(1, 1) abbreviazione di Cells.Item(1, 1)? Quindi Cells(1, 1) equivale effettivamente a Item(1, 1)? Cosa mi manca?

risposta

5

Il modo migliore per capire questo è tramite l'esempio seguente

Quando .Item e .Cells sono utilizzati con riferimento a un intervallo allora, sì, sono uguali. Ad esempio

Sub Sample() 
    Dim rRange As Range 
    Set rRange = ThisWorkbook.ActiveSheet.Range("B1:C10") 

    With rRange 
     Debug.Print .Item(1, 3).Address '<~~ $D$1 
     Debug.Print .Cells(1, 3).Address '<~~ $D$1 
    End With 
End Sub 

Nella suddetta entrambi raffigurano l'indirizzo della cella che Range

Sono differenti quando Cells() viene usato indipendentemente un intervallo.

Sub Sample() 
    Dim rRange As Range 
    Set rRange = ThisWorkbook.ActiveSheet.Range("B1:C10") 

    With rRange 
     Debug.Print .Item(1, 3).Address '<~~ $D$1 
     '~~> DOT before Cells missing 
     Debug.Print Cells(1, 3).Address '<~~ $C$1 
    End With 
End Sub 

Nella sopra .Item raffigura l'indirizzo della cella in quel Range, dove come Cells raffigura l'indirizzo della cella nella ActiveSheet

+0

Per aggiungere alla confusione 'ThisWorkbook.ActiveSheet.Cells.Item (1, 3) .Address' è di $ C $ 1. Cerco di tenerlo bene pensando a 'Item' come parte di una collezione, quindi' ActiveSheet.Item (1, 3) 'non è valido mentre' ActiveSheet.Cells.Item (1, 3) 'è. – Jeeped

+0

Vero. '.Item' deve essere usato con un oggetto range mentre le celle possono essere usate indipendentemente :) –

+1

Per essere chiari, l'oggetto può essere usato con qualsiasi ... bene" oggetto "in qualsiasi Collezione, non solo per la Gamma Collezione. – Tim

0

riesco a vedere alcun uso delle Cellule proprietà diverse da quelle per riferimento a tutte le celle in un foglio di lavoro. Lo inserirò in questo modo (basato sui miei esperimenti e ricerche):

La proprietà celle restituisce un oggetto intervallo contenente tutte le celle dell'oggetto a cui è applicato. Per il caso di un foglio di lavoro è chiaramente utile per poter utilizzare tutte le proprietà dell'oggetto intervallo nell'intero foglio di lavoro. Per il caso di un oggetto Range non sono sicuro che abbia qualche utilità.Non riesco a trovare, per esempio, tutte le proprietà in più che non posso ottenere dalla proprietà dell'oggetto Gamma senza prima applicare le celle di proprietà a quello oggetto di intervallo

mi chiedo se alcuni dei suo utilizzo in codice deve solo “insinuato in " negli anni. Ad esempio, credo che questo tipo di riga di codice sia un possibile modo esplicito di fare riferimento all'oggetto intervallo della seconda cella in un foglio di lavoro utilizzando la proprietà dell'oggetto intervallo dell'oggetto Ws.Range ("A1"). Areas.Item (1) .Item (1, 2) Sulla falsariga di ciò che sento detto, posso fare affidamento sull'implicito implicito della prima Area e della Proprietà di default dell'oggetto per riscrivere la riga di codice così: Ws.Range ("A1") (1, 2)

Se cado in cellule di proprietà, lo faccio nulla di male Ws.Range ("A1") Cells (1, 2)

ma vorrei suggerire:. _ (i) l'uso di Le celle qui sono totalmente ridondanti _ (ii) Sto ancora usando qui il Range It em Proprietà. _ (iii) Nessuna proprietà delle celle _ (iv) Una parte di codice come questa Celle (1, 2) ha "crept in" come una proprietà "Cells che accetta uno o due argomenti. ...... ".. e/o ..." celle ha una proprietà articolo ... "... ecc ...,. Penso che quelle affermazioni potrebbero essere errate. Penso che la proprietà delle celle non abbia argomenti. (Non sono sicuro se Cell potrebbe avere una proprietà Item. Non sono un professionista informatico ma gli esperti mi hanno detto che intellisense lo offre, o Microsoft Help che suggerisce che non è garantito che esista. Proprietà)

In ogni caso una parte di codice come questa, Celle (1, 2), viene spiegata come segue: Le celle restituiscono un Oggetto intervallo. Quell'oggetto Range ha la sua proprietà di default, la proprietà dell'oggetto oggetto Range ad essa applicata. A meno che non utilizzi le celle indipendentemente per un intervallo, probabilmente dovrei ometterlo. Suggerisco questo, in questo caso, non sono esplicito. Piuttosto sto contribuendo a un'idea, forse falsa, che posso riferirmi a un oggetto Range tramite un _ _ .. "Celle (_argument/s_) tipo" Proprietà, .. che probabilmente non esiste.

Alan

Problemi correlati