2015-07-08 31 views
5

Ho bisogno semplicemente di un codice per selezionare una cella, tuttavia quella cella per selezionare le modifiche. Ho una cella nella cartella di lavoro che identificherà quale cella dovrebbe essere. La cella A1 contiene la cella # che deve essere selezionata.Come utilizzare il riferimento indiretto per selezionare una singola cella o intervallo in vba

In questo esempio, la cella A1 contiene la parola "P25", quindi voglio che il codice seguente faccia riferimento a A1 per la cella indiretta ref a P25, quindi selezionare la cella P25.

ho provato entrambe le linee separatamente:

Sub IndirectCellSelect() 

    Sheet.Range(INDIRECT(A1)).Select 
    Range(INDIRECT(A1)).Select 

End Sub 

ho la Sub errore o di funzione non è definita, quando si arriva alla parola INDIRETTO

risposta

2

Una lieve alterazione del codice scritto funziona:

Range([indirect("a1")]).Select 

ma vorrei consigliare di provare uno di questi, invece:

Sheet.Range(Sheet.Range("A1").Value).Select 
Range(Range("A1")).Select 

la prima essere più esplicito ed è raccomandato nel codice di produzione.

+0

Grazie! Il primo e il terzo hanno funzionato! Andrò con il terzo, dato che li consigli invece. – Bryan

+0

La seconda formula deve essere adattata al foglio che si sta utilizzando, questo sarebbe 'Foglio1' per il primo foglio di una nuova cartella di lavoro. Questo è spesso raccomandato nella pratica, in quanto il codice funzionerà sempre allo stesso modo e non dipenderà dal foglio attualmente attivo. –

0

Si può fare questo un modo diverso, ma se si desidera utilizzare una funzione di foglio di lavoro Excel nativo all'interno del codice VBA, è necessario fare questo in questo modo (si noti che ho adattato anche come si fa riferimento A1):

Application.WorksheetFunction.Indirect(Sheets(1).Range("A1")) 

Modifica Scuse - Non l'avevo verificato. Sembra che la funzione indiretta non sia disponibile in questo contesto. Invece, provare qualcosa di simile:

Dim rng as Range 
Set rng = sheets(1).Range("A1") 

sheets(1).Range(rng.text).Select 
+0

Purtroppo non ho familiarità con come utilizzare correttamente una funzione. Ho provato un paio di modi inutilmente e basta leggere le differenze tra quando utilizzare una funzione, ma ancora non poteva implementarlo. Ho appena ricevuto l'errore "L'oggetto non supporta questa proprietà o metodo". Anche i fogli (1) sono importanti se il nome del foglio è diverso o è semplicemente 1 = attivo? – Bryan

+1

Vedere le mie modifiche - questo funziona per la maggior parte delle funzioni ma sembra che "Indiretto" non sia supportato in questo modo. ha senso in quanto è IMO più confuso comunque. –

+0

Ahh fantastico, sì, sembra più sicuro di come mi sono imbattuto in quel problema in passato, mal fatto che si lavori! Qualche possibilità di conoscere questo post? Nessuno ha risposto ed è rimasto attivo per 1 mese ... http://stackoverflow.com/questions/30764616/downloaded-new-versions-of-files-need-to-be-opened-and-saved-to- work-automatic-r – Bryan

0
Worksheets("list").Sort.SortFields.Add Key:=Range(INDIRECT("I16" & "3" & ":" & "I16" & "5002")) _ 
     , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal 
    With Worksheets("list").Sort 
     .SetRange Range("B2:K5002") 
     .Header = xlYes 
     .MatchCase = False 
     .Orientation = xlTopToBottom 
     .SortMethod = xlPinYin 
+1

Benvenuto in Stack Overflow! Puoi chiarire la tua risposta aggiungendo una spiegazione più dettagliata insieme al codice di esempio. – jkdev