Ir ao conteúdo

setar um botão (VBA)


distrutor

Posts recomendados

Postado

Boa tarde pessoal,

Aqui estou eu novamente.

Tenho um código em VBA que faz diversas ProcV's de uma planilha para outra, essa Macro é ativada sempre quando se clica 2x na célula L1 (alterar).

Queria colocar um botão nessa planilha, para ficar mais intuitivo.

Alguem sabe como setar o botão para fazer isso? Ao invés de setar o "Range("L1:L1"), setar um botão?

Segue abaixo como está o código.

Private Sub Worksheet_Change(ByVal Target As Range)

Dim Colunas As Range

Set Colunas = Range("L1:L1")

If Not Application.Intersect(Colunas, Range(Target.Address)) Is Nothing Then

linha = Target.Row

On Error Resume Next

For i = 2 To 10000

Cells(i, "M").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:L10000], 12, 0)

Cells(i, "N").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:M10000], 11, 0)

Cells(i, "O").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:I10000], 9, 0)

Cells(i, "P").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:B10000], 2, 0)

Cells(i, "Q").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:C10000], 3, 0)

Cells(i, "R").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:D10000], 4, 0)

Cells(i, "S").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:E10000], 5, 0)

Cells(i, "T").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:F10000], 6, 0)

Cells(i, "U").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:G10000], 7, 0)

Next

End If

End Sub

Obrigado!!!

Postado

Para permitir o disparo do código por meio de um botão substitua estas linhas

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Colunas As Range
Set Colunas = Range("L1:L1")
If Not Application.Intersect(Colunas, Range(Target.Address)) Is Nothing Then
linha = Target.Row
On Error Resume Next

por estas

Sub Teste()
Dim i as Long

Postado

Bom Dia!

so tentando ajudar.... maaassss?????

nao é mais pratico no ligar de um botao, alterar esta linha

Set Colunas = Range("L1:L1") para

Set Colunas = Range("A1:A10000")

para que sempre que um novo valor for digitado nessa coluna

o PROCV ja rode imediatamente, atualizando assim... os dados! :lol:

é so uma Sugestão!:rolleyes:

Postado

Boa dia Deejaywesley,

Na verdade eu estava usando essa celula como se fosse um botão mesmo, essa coluna é vazia...

Ah, estava analisando tambem, pode ser via Macro normal, nçao precisa ser um botão, seria até melhor, pois são criadas novas Abas sendo necessario inserir o código na aba criada.

Tem como deixar essa código para funcionar assim? Como se fosse uma Macro executavel e não automatica?

Obrigado!

Postado

Beleza,

P.S. Essa é outra planilha que estou aproveitando o código que me passou a alguns dias atrás. A outra ta funcionando normalmente.

Valeu!

osvaldomp, pode me ajudar?

Fiz essa alteração que sugeriu, ele fica como uma macro executavel (manual) mas nas celulas vazias ou não encontradas da erro. Tem como tratar?

Postado
Beleza,

P.S. Essa é outra planilha que estou aproveitando o código que me passou a alguns dias atrás. A outra ta funcionando normalmente.

Valeu!

osvaldomp, pode me ajudar?

Fiz essa alteração que sugeriu, ele fica como uma macro executavel (manual) mas nas celulas vazias ou não encontradas da erro. Tem como tratar?

Boa tarde!

Fazendo a alteração proposta pelo osvaldomp e com base na formula em VBA que já tinha tentei fazer o tratamento dos erros, mas não está rolando, devo estar colocando alguma coisa errada. =/

Segue o que estou tentando fazer.

Cells(i, "M").Value = Application.WorksheetFunction.If(Application.WorksheetFunction.IsError _

(WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets _

("Plan1").[A2:L10000], 12, 0)), """", (WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks _

("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:L10000], 12, 0)))

Alguem pode me ajudar?

Boa tarde!

Fazendo a alteração proposta pelo osvaldomp e com base na formula em VBA que já tinha tentei fazer o tratamento dos erros, mas não está rolando, devo estar colocando alguma coisa errada. =/

Segue o que estou tentando fazer.

Cells(i, "M").Value = Application.WorksheetFunction.If(Application.WorksheetFunction.IsError _

(WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets _

("Plan1").[A2:L10000], 12, 0)), """", (WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks _

("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:L10000], 12, 0)))

Alguem pode me ajudar?

Pessoal,

Consegui contornar a situação de forma simples e ficando funcional para mim fazendo uma macro que ativa a celula setada no código.

´

Agora só tenho uma questão a ser resolvida.

Como faço para o código abaixo ficar ativo em todas as abas da planilha, inclusive quando for inserido uma nova aba? Do jeito que está, sempre que eu incluir uma nova aba tenho que colocar o código VBA nela.

Private Sub worksheet_Change(ByVal Target As Range)

Dim Colunas As Range

Set Colunas = Range("L1:L1")

If Not Application.Intersect(Colunas, Range(Target.Address)) Is Nothing Then

linha = Target.Row

On Error Resume Next

For i = 2 To 10000

Cells(i, "M").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:L10000], 12, 0)

Cells(i, "N").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:M10000], 11, 0)

Cells(i, "O").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:I10000], 9, 0)

Cells(i, "P").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:B10000], 2, 0)

Cells(i, "Q").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:C10000], 3, 0)

Cells(i, "R").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:D10000], 4, 0)

Cells(i, "S").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:E10000], 5, 0)

Cells(i, "T").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:F10000], 6, 0)

Cells(i, "U").Value = Application.WorksheetFunction.VLookup(Cells(i, "A").Value, Workbooks("TESTE_PATI_BOL (4).xls").Worksheets("Plan1").[A2:G10000], 7, 0)

Next

End If

End Sub

Obrigado a Todos pela ajuda!

Postado

Boa tarde colegas,

Problema resolvido.

Fiz como o osvaldomp disse, mas mantive a linha com o código "On Error Resume Next", assim ele faz o tratamento do erro, não deixando nenhum residuo na celula.

Agora mesmo se for incluido abas futuramente poderei utilizar a mesma Macro sem copiar e colar o código na outra planilha criada.

Obrigado!

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!