2010-02-04 20 views
17

Ho un piccolo script in Excel/VB che sto cercando di funzionare. Tutto quello che voglio fare è selezionare una gamma dinamica di dati da copiare ma non riesco a trovare alcun aiuto/codice su come ottenere i dati della griglia (come A11).Ottieni la cella corrente in Excel VB

Ecco codice che ho da registrazione macro che seleziona l'intervallo di dati:

Range("D291:D380").Select 

Speravo ho potuto solo fare Range(Current).Select o qualcosa, ma che non funziona.

Qualsiasi aiuto è apprezzato.

+1

App.ActiveCell;) –

risposta

20

Hai provato:

Per una cella:

ActiveCell.Select 

Per più celle selezionate:

Selection.Range 

Ad esempio:

Dim rng As Range 
Set rng = Range(Selection.Address) 
+2

credo " atto iveCell.Address "funzionerà. Ho un MsgBox che visualizza i dati variabili che sto cercando di ottenere. –

+0

@Apps Ho aggiunto un po 'di più. Controlla. –

+0

Per espandere questa risposta, una volta impostato 'rng' puoi ottenere' rng.Cells.Column' e 'rng.Cells.Row'. Per espandere su 'ActiveCell.Address', se si' Dim s as String: s = ActiveCell.Address' restituirà (ad esempio) "$ E $ 3". – Barniferous

2

Se stai cercando per afferrare una gamma con un dinami Cally generato stringa, quindi non resta che costruire la stringa in questo modo:

Range(firstcol & firstrow & ":" & secondcol & secondrow).Select 
+0

App.ActiveCell. –

2

Questo non può aiutare risponde direttamente alla tua domanda, ma è qualcosa che ho trovato utile quando si cerca di lavorare con gamme dinamiche che possono aiutarvi.

Supponiamo che nel foglio di lavoro di avere i numeri da 100 a 108 nelle celle A1: C3:

  A B C 
1  100 101 102 
2  103 104 105 
3  106 107 108 

Quindi per selezionare tutte le celle è possibile utilizzare la proprietà CurrentRegion:

Sub SelectRange() 
Dim dynamicRange As Range 

Set dynamicRange = Range("A1").CurrentRegion 

End Sub 

Il vantaggio di questo è che se si aggiungono nuove righe o colonne al proprio blocco di numeri (ad esempio 109, 110, 111), la CurrentRegion farà sempre riferimento all'intervallo ingrandito (in questo caso A1: C4).

Ho usato CurrentRegion un bel po 'nel mio codice VBA e trovo che sia più utile quando si lavora con intervalli dimensionati dinamicamente. Inoltre evita di dover inserire intervalli di codice nel codice.

Come nota finale, nel mio codice vedrete che ho usato A1 come cella di riferimento per CurrentRegion. Funzionerà anche a prescindere dalla cella di riferimento (prova: sostituire A1 con B2, ad esempio). Il motivo è che CurrentRegion selezionerà tutte le celle contigue basate sulla cella di riferimento.

2

La parola chiave "Selezione" è già un oggetto Range di VBA in modo da poter utilizzare direttamente, e non si dispone per selezionare le celle da copiare, per esempio si può essere di Sheet1 e questi comandi:

ThisWorkbook.worksheets("sheet2").Range("namedRange_or_address").Copy 
ThisWorkbook.worksheets("sheet1").Range("namedRange_or_address").Paste 

Se si tratta di una selezione multipla si dovrebbe utilizzare l'oggetto Campo in un ciclo for:

Dim a as Range 
For Each a in ActiveSheet.Selection.Areas 
    a.Copy 
    ThisWorkbook.worksheets("sheet2").Range("A1").Paste 
Next 

saluti

Thomas

+0

Dovrebbe essere 'Dim a As Range' – barrowc

+0

Corretto grazie! – Thomas

1

Prova questa

Dim app As Excel.Application = Nothing 
Dim Active_Cell As Excel.Range = Nothing 

Try 
      app = CType(Marshal.GetActiveObject("Excel.Application"), Excel.Application) 
Active_Cell = app.ActiveCell 

Catch ex As Exception 
      MsgBox(ex.Message) 
      Exit Sub 
     End Try 

'    .address will return the cell reference :) 
0

Mi rendo conto che questo non si applica direttamente dal titolo della questione, tuttavia alcuni modi per affrontare un range variabile potrebbe essere quella di selezionare l'intervallo ogni volta che il codice viene eseguito - soprattutto se sei interessato a un intervallo selezionato dall'utente. Se l'utente è il interessato a tale opzione, è possibile utilizzare Application.InputBox (pagina di documentazione ufficiale here). Una delle variabili opzionali è 'tipo'. Se il tipo è impostato su 8, InputBox ha anche un'opzione di selezione dell'intervallo in stile excel. Un esempio di come usarlo in codice sarebbe:

Dim rng as Range 
Set rng = Application.InputBox(Prompt:= "Please select a range", Type:=8) 

Nota:

Se si assegna il valore InputBox per una variabile none-gamma (senza la parola chiave Set), invece delle gamme , verranno assegnati i valori delle gamme, come nel seguente codice (anche se si seleziona più intervalli in questa situazione può richiedere i valori da assegnare ad una variante):

Dim str as String 
str = Application.InputBox(Prompt:= "Please select a range", Type:=8) 
Problemi correlati