A linguagem de script para o Microsoft Excel, Visual Basic, permite estender já ampla conjunto de ferramentas do Excel. No entanto, a codificação diretamente no Visual Basic pode ser difícil porque algumas funções (como a classificação ) exigem a criação de vários parâmetros em uma fashion.You exato pode evitar mão - de codificação por completo, deixando o gravador de macro escrever o código para você, mas isso nem sempre faz net o resultado que você procura. A solução é combinar o melhor de dois mundos: usar macros para fazer a codificação em massa e um pouco de codificação manual para terminar o trabalho . Ordenar uma pequena mesa
Use Visual Basic para classificar uma pequena mesa . Comece inserindo a seguinte tabela em células G8 para H11 na folha 1 :
nome do cliente, conta balanceZephyr máquinas de vento , Mesas 5Arondale ,- 10Bubble Gumballs , 30
Após digitar os dados , selecione-o e começar a gravar a macro (Developer > Gravar macro) . Nomeie o MySort macro. Sort ( Dados > Classificar de A a Z) os dados selecionados na primeira coluna , e parar a gravação da macro.
Reproduzir a Macro
Tente usar a macro para recorrer uma gama diferente : copiar e colar a tabela de clientes para outra área da planilha e selecione o novo intervalo. Reproduzir a macro (Developer > Macros > MySort ) , e observe o efeito: os dados não foi resolvido . Procure o problema no código do Visual Basic criado por sua gravação de macro. Comece a navegar para o código: . Pressione Alt- F8 , selecione sua macro MySort , e clique no botão Editar
Dentro da função MySort , observe a seguinte declaração:
ActiveWorkbook.Worksheets ( "Sheet1 " ) Sort.SortFields.Add chave: . = Range (" G8 " ) ...
e uma declaração de algumas linhas após ele :
SetRange Range ( ". C9: D12 " )
Ambas as declarações são a fonte do problema , eles são as razões pelas quais MySort deixa de classificar o intervalo selecionado: o gravador de macro do Visual Basic hard-coded o intervalo de dados ( " C9: D12 " e " G8 " ) para classificar . Sua tarefa é a de substituir os intervalos fixos para fazer a macro tipo a seleção atual
usar a propriedade Selection
Especificamente , o parâmetro -chave: . = Range ( " G8 " ) informa ao Excel para classificar a tabela de clientes com base na coluna " cliente " , que começa no G8 celular. Para substituir essa coluna original " cliente " com o um dentro do texto selecionado no momento , olhar para a propriedade Selection do objeto Application . Esta propriedade refere-se ao intervalo de células selecionadas no momento . Substitua -chave: = Range (" G8 " ) com esta : Chave: = k . Você vai definir k em um momento
A próxima faixa de hard-coded para substituir ocorre algumas declarações abaixo : . . SetRange Range (" G8 : H11 " ) . O método . SetRange indica para o Excel a gama completa você deseja classificar. Substitua SetRange Range (" G8 : H11 " ) . Com isso: ". . SetRange r"
A variável r, como a variável k ( ey ) você acabou de digitar , virá a partir da propriedade Selection. Ir para o início da definição de macro e digite essas linhas :
Dim r , k Como Faixa
Set r = Application.SelectionSet k = r.Columns (1)
a primeira atribuição Set define o intervalo de células necessárias para o método SetRange - . toda a seleção. A segunda atribuição define o intervalo necessário para a chave de classificação para a primeira coluna na seleção. Você pode classificar na segunda coluna , alterando o "1" para "2 ".
Testar a macro corrigida
A correção código é completa. Testá-lo , retornando à planilha , selecionando a tabela de clientes - onde quer que você colocá-lo na folha - e funcionando MySort . Copie essa tabela para um novo conjunto de células , selecione as células e executar MySort sobre eles novamente. Observe o tipo agora funciona corretamente .