Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
Por SandroLima
#36496
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?
Editado pela última vez por SandroLima em 08 Set 2018 às 10:15, em um total de 1 vez.
Por osvaldomp
#36503
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
Por SandroLima
#36507
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.
Você não está autorizado a ver ou baixar esse anexo.
Por SandroLima
#36544
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.
Avatar do usuário
Por ExcelFlex
Posts Avatar
#36547
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
Você não está autorizado a ver ou baixar esse anexo.
Por SandroLima
#36548
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á.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord