Página 1 de 1

VBA - Consultar e Alterar

Enviado: 06 Set 2018 às 21:57
por SandroLima
Tenho uma planilha na qual estou configurando o botão "ALTERAR"

Preciso para isso fazer um loop dentro do intervalo da tabela
Código: Selecionar todos
 Dim Cadastro, Data, ID, Nome as string
    Dim tabela As ListObject
    Set tabela = wsh_Pacientes.ListObjects("TB_Pacientes")
    
    Dim Linha As Integer

       Linha = tabela.ListRows(1) 'O CÓDIGO APRESENTA ERRO DE DEPURAÇÃO AQUI
        
        Do Until CStr(tabela.ListRows(Linha).Range(Linha, 1)) = Cadastro
            Linha = Linha + 1
        Loop
        tabela.ListRows(Linha).Range(Linha, 2) = Data
        tabela.ListRows(Linha).Range(Linha, 3) = ID
        tabela.ListRows(Linha).Range(Linha, 4) = Nome
        
       MsgBox "Alteração realizada com sucesso!", vbExclamation, "Cadastro de Pacientes"
    
       ActiveWorkbook.Save

End Sub
Como posso fazer uma declaração do tipo:

Dim Linha as Integer
Linha = 5

Mas considerando a primeira linha da tabela (que pode variar a posição na planilha)

Queria algo do tipo

Linha = tabela.ListRows(1)

E depois na sequencia do código...

Linha = tabela.ListRows(1) + 1

Para fazer o Loop.

Mas está dando erro... É possível fazer como relatei?

Re: Loop dentro do intervalo da tabela

Enviado: 07 Set 2018 às 11:04
por osvaldomp
SandroLima escreveu: Linha = tabela.ListRows(1) 'O CÓDIGO APRESENTA ERRO DE DEPURAÇÃO AQUI
Experimente:
Código: Selecionar todos
Linha = tabela.ListRows(1).Range.Row
dicas
1. Dim Cadastro, Data, ID, Nome as string ~~~> se a sua intenção é declarar todas as variáveis como String, então a forma correta é ~~~> Dim Cadastro As String, Data As String, ID As String, Nome as string, pois da forma que você declarou somente Nome é do tipo String, as demais são do tipo Variant
2. Set tabela = wsh_Pacientes.ListObjects("TB_Pacientes") ~~~> o que é wsh_Pacientes ? Essa variável não está declarada e não há valor atribuído a ela (provavelmente uma planilha).
Se você adotar a obrigatoriedade de declarar variáveis ficará fácil para detectar esse tipo de erro. No editor de VBA menu Ferramentas / Opções / marque Requerer declaração de variável. A partir daí no topo de todos os módulos de VBA estará Option Explicit
3. Do Until CStr(tabela.ListRows(Linha).Range(Linha, 1)) = Cadastro ~~~> o que é Cadastro? Ao menos no pedaço de código que você colocou não encontrei essa variável e nem a do item 2 acima
4. Do Until CStr(tabela.ListRows(Linha).Range(Linha, 1)) = Cadastro ~~~> Não faz sentido executar um Loop para buscar um valor. Imagine fazer um Loop em uma tabela com 10 mil linhas para buscar um valor. Pesquise sobre o comando Find. Um exemplo genérico ~~~> Linha = Range("A1:A1000").Find(Cadastro).Row

Re: Loop dentro do intervalo da tabela

Enviado: 07 Set 2018 às 11:59
por SandroLima
Bom dia, amigos do fórum.

Bom dia, Osvaldomp... como sempre me trazendo dicas valiosas para o meu aprendizado.

Tentei corrigir a maior parte das orientações que vc me passou. Mas ainda estou aprendendo.

Pode, por gentileza, dar uma conferida nos códigos dos botões "CONSULTAR" E "ALTERAR" que atualizei... já que são dependentes.

E sobre o "loop" poderia escrever então no código da minha planilha como ficaria a melhor opção (que seja com o comando Find) (se possível com um breve comentário para o aprendizado).

Sobre o exemplo genérico Linha = Range("A1:A1000").Find(Cadastro).Row
gostaria uma forma de declarar o Range dentro do intervalo da tabela uma vez que ela pode mudar a sua posição na planilha.
Por exemplo algo to tipo Linha=Range("TB_Cadastro[Cadastro}").Find(Cadastro).Row
É possível?

Envio a planilha com o código para que vc e quem mais puder avaliar.

Muito obrigado mais uma vez a quem puder ajudar.

Re: VBA - Consultar e Alterar

Enviado: 09 Set 2018 às 11:43
por SandroLima
Bom dia.

Alguém pode me ajudar a concluir o código?

Informações e planilha no penúltimo post deste tópico.

Obrigado e um bom dia a todos.

Re: VBA - Consultar e Alterar

Enviado: 09 Set 2018 às 14:20
por ExcelFlex
Boa tarde sandrolima, estou enviando pra você a planilha com alterações no código do botão "Consultar" coloquei também um botão "Limpar" para iniciar nova pesquisa.

Uma observação: a usabilidade deste formulário não é muito boa, a forma como ele foi montado não é muito intuitivo para um usuário que não tenha um treinamento específico para operar nesta planilha, se você tiver interesse eu posso fazer algumas melhorias nele, mas isso modificaria completamente a estrutura como ele foi criado. Teria mais usabilidade, controle e facilidade de navegação, com menores chances de o usuário alterar ou excluirum registro acidentalmente.

Att,

Marcus

Re: VBA - Consultar e Alterar

Enviado: 09 Set 2018 às 14:55
por SandroLima
Boa tarde, Marcus

Muito obrigado pela colaboração e vou testá-la agora mesmo.

Como sempre falo quando peço ajuda aqui no fórum toda e qualquer ajuda, seja na forma de sugestão ou escrita de código comentado, é sempre muito bem vinda... principalmente para quem assim como eu está na fase de aprendizagem.

Toda e qualquer melhoria que vc puder sugerir vai ser de muito boa aceitação. Sou encantado com as possibilidades do excel mesmo sendo apenas um iniciante.

Tudo que gostaria é os "ranges" de busca/pesquisa ficassem sempre dentro dos intervalos da tabela em vez correr toda uma linha ou coluna da tabela (isso pq farei outras tabelas baseadas nesse modelo que podem ocupar posições diferentes na planilha) mas como vc falou talvez não seja a melhor forma de aplicar.

Gostaria sim de ver suas sugestões de melhoria e agradeço muito desde já.

VBA - Consultar e Alterar

Enviado: 10 Set 2018 às 10:48
por ExcelFlex
Show, dá uma olhada lá no meu site se posso te ajudar www.excelflex.com.br, lá tem meus dados de contato.

Abçs,

Marcus

Re: VBA - Consultar e Alterar

Enviado: 10 Set 2018 às 20:16
por SandroLima
Boa noite

O que significa a expressão logo após a Sub preenchecampos?
Código: Selecionar todos
preencheCampos (res.Row - Range("TB_Cadastro").Row + 1)
Pode fazer um breve comentário?

VBA - Consultar e Alterar

Enviado: 10 Set 2018 às 21:07
por SandroLima
Já consegui identificar o que significa.