Kabele, este seu novo arquivo está com erro no link.
Quanto as questões :
1º) Porque ao clicar no botão "buscar" e selecionar a "safra" os dados importados são somente das primeiras colunas ( B,C,D,E,F,G,H,I ) e não os dados todos das outras colunas?
R: Em seu modelo original que anexou, se você adicionar, Range("D5").Select, ficando assim :
If safra <> "Todos" Then
Range("D5").Select
Selection.AutoFilter
ActiveSheet.Range("$A$8:$AO$15").AutoFilter Field:=3, Criteria1:=safra
Verá que ao ser executada o Filtro é formado corretamente, e depois temos :
Range("B5").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
onde você seleciona "B5", e as próximas instruções Selecionam as Colunas "B até I", então supuz que era este Range que queria, e pelo que postou agora, reparei que quer todas, só que a instrução, Range(selection, Selection....., Seleciona as Colunas que Contem Dados, parando na primeira celula Vazia que encontrar, ou seja "I5:I6" uma vez que nas Celulas "J5:J6" estão Vazias.
Agora se quer TODAS as Colunas (Coluna 2(B) até a 41(AO)), é só alterar na instrução na linha :
.Resize(.Rows.Count - 2, 8) para .Resize(.Rows.Count - 2, 40).
2º) Explicação para essa formula:
=DESLOC(Vendas!$A$6;1;0;CONT.VALORES(Vendas!$A$7:$AO$14);1)
R : Não sou muito bom em formulas, isto é mais com o Bernardo e o leonardojones, que são feras em formulas, mas me parece uma formula de intervalos dinâmicos :
DESLOC - Desloca quantidade especificada abaixo e a direita, no caso acima $A$6;1;0, retorna o Dado que está em A7 na mesma Coluna, se fosse $A$6;2;1, retorna a partir de A6 duas Celulas abaixo o Valor que está na Coluna B
CONT.VALORES :Conta a quantidade de Valores existentes no endereço definido.
De uma olhada no link abaixo, tem uma explicação bem detalhada do Adilson Soledade junto com um exemplo para baixar.
intervalos dinâmicos
http://usuariosdoexcel.wordpress.com/2011/04/17/
3º) Coutinho, vc disse que por eu ter usado o "Selection" eu tenho que referenciar uma celula antes. Existe outro comando? Sempre que eu usar o "Selection" terei que referenciar uma celula antes?
R : Sempre que usamos a Propriedade Selection, siginifica que uma celula está selecionada, no seu caso com o Filtro, poderiámos suprimir estas instrução deixando somente :
ActiveSheet.Range("$A$7:$AO$15").AutoFilter Field:=3, Criteria1:=safra
Desde que a linha de Cabeçalho já esteja formado com a opção Dados/Filtro.
Não sei se fui claro, tem coisas que é mais simples fazer do que explicar.
Vou sugerir mais uma dica para você entender melhor as ações da Rotina, faça o seguinte :
Abra o arquivo IMPORTAR_REGISTROS.xls, exiba a tela do VBA, acesse seu formulário e de dois clique no Botão "BUSCAR", agora siga a rotina PASSO a PASSO utilizando a Tecla F8, vá precionando a mesma e verá que será executada todas as linhas uma a uma cada vez que preciona F8, ficando bem mais simples de visualizar e entender o que cada instrução está realizando.
[]s
Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel
Postado : 26/07/2011 5:28 pm