Il linguaggio di scripting per Microsoft Excel , Visual Basic , consente di estendere già ampia gamma di strumenti di Excel . Tuttavia, la codifica direttamente in Visual Basic può essere difficile perché alcune funzioni ( come l'ordinamento ) sufficiente impostare diversi parametri in un fashion.You esatto può evitare di codifica manuale del tutto lasciando il registratore di macro scrivere il codice per voi , ma questo non sempre net il risultato che cercate. La soluzione è quella di combinare il meglio dei due mondi : utilizzare le macro per fare la codifica di massa e un po ' di codice per finire il lavoro a mano . Ordinare una tabella Piccolo
utilizzare Visual Basic per risolvere un piccolo tavolo . Iniziare inserendo il seguente tabella nelle celle del G8 di H11 in Foglio 1 :
nome del cliente , conto balanceZephyr vento Machines , 5Arondale Scrivanie Gumballs , - 10Bubble , 30
Dopo aver inserito i dati , selezionarlo e iniziare la registrazione della macro ( sviluppatore> Registra macro ) . Assegnare un nome alla MySort macro . Sort ( Dati > Ordina dalla A alla Z ), i dati selezionati sulla prima colonna , e interrompere la registrazione della macro .
Replay il Macro
provare a utilizzare la macro di ricorrere una gamma diversa : copiare e incollare il tavolo cliente in un'altra area del foglio di lavoro e selezionare la nuova gamma . Replay della macro ( sviluppatore> Macro> MySort ) , e notare l'effetto : i dati non sono stati ordinati . Cercare il problema nel codice Visual Basic creato da la registrazione macro . Iniziare la navigazione verso il codice : . Premere Alt-F8 , selezionare la macro MySort , e fare clic sul pulsante Modifica
All'interno della funzione MySort , notare questa dichiarazione:
ActiveWorkbook.Worksheets ( " Foglio1 « . ) Tasto Sort.SortFields.Add : = Range (" G8 " ) ...
E una dichiarazione di poche righe dopo : .
SetRange Range (" C9 : D12 " ) per
Entrambe queste affermazioni sono la fonte del problema : sono le ragioni per cui MySort non riesce a ordinare l'intervallo selezionato : il registratore di macro a livello di codice la gamma di dati di Visual Basic ( " C9 : D12 " e " G8 " ) per ordinare . Il vostro compito è quello di sostituire i campi codificati a rendere il genere macro la selezione corrente
utilizzare la selezione Proprietà
In particolare , il tasto del parametro : . = Gamma ( " G8 " ) dice a Excel per ordinare la tabella dei clienti in base alla colonna "cliente", che inizia a cella G8 . Per sostituire la colonna originale di "cliente" con quello dentro il testo attualmente selezionato , guarda alla proprietà di selezione dell'oggetto Application . Questa proprietà si riferisce alla gamma di celle attualmente selezionate . Sostituire Legenda: = Range (" G8 ") con questo : Legenda: = k . Potrai definire k in un momento
La prossima gamma di hard- coded per sostituire verifica alcune affermazioni giù : . . SetRange Range (" G8 : H11 " ) . Il metodo . SetRange indica a Excel la gamma completa che si desidera ordinare . Sostituire SetRange Range (" G8 : H11 "). , Con questo : ". . SetRange r"
La variabile r , come la (ey) variabile k appena digitata , verrà dalla struttura di selezione . Vai all'inizio della definizione della macro e inserire queste righe :
Dim r , k come gamma
Set r = Application.SelectionSet k = r.Columns ( 1 ) per < p > il primo set assegnazione definisce la gamma di cellule necessarie per il metodo SetRange - . l'intera selezione . La seconda assegnazione imposta l' intervallo necessario per la chiave di ordinamento per la prima colonna nella selezione . È possibile ordinare la seconda colonna , cambiando l '"1 " a " 2 ".
Verificare la macro Corretto
La correzione del codice è completo . Provatelo con il ritorno al foglio di lavoro , selezionare la tabella dei clienti - ovunque si posò sul foglio - e in esecuzione MySort . Copia quel tavolo per una nuova serie di celle , selezionare le celle , e correre MySort su di loro ancora una volta . Si noti il tipo ora funziona correttamente .