Notifications
Clear all

Como elaborar uma macro que altera os dados do cadastro???

4 Posts
1 Usuários
0 Reactions
1,336 Visualizações
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

http://www.4shared.com/file/iKr_sYNF/al ... ados2.html
Pessoal, eu sou um principiante na arte de programar planilhas através do VBA, por isso estou com esta dúvida.
Já procurei por vários sites e não consegui esclarecer.

No "Botão 1" eu quero inserir uma macro que leia os dados nas células b2 e b3 e use estes dados para alterar o cadastro que se encontra na plan2. Repare que, quando seleciona o cadastro pela caixa de combinação, os dados são recuperados automaticamente.

Isso é possível? Desde já, obrigado pela ajuda.

 
Postado : 19/07/2010 4:32 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Olá, phmarx008!
Eu não costumo baixar planilhas (nada pessoal), mas enquanto alguém não lhe traz uma solução apropriada, já vou lhe adiantando algumas coisas, embora não tenha visto seu trabalho.
Não sei se você está usando Userforms ou trabalhando direto na planilha, mas de qualquer forma, para capturar dados de células você pode usar:
Sheets("NomeDaPlanilha").Range("B2").Value
Substitua "NomeDaPlanilha" pelo nome da planilha (com aspas mesmo, ou coloque o número da planilha, sem aspas neste caso).
Desta forma você acessa o valor de B2 de tal planilha.
Para capturar o valor você pode usar uma variável, por exemplo:
Captura = Sheets("NomeDaPlanilha").Range("B2").Value
E depois lançar o valor capturado em outro lugar:
Sheets("NomeDaPlanilha").Range("B10").Value = Captura
Então, pode colocar isto dentro de um procedimento e associá-lo a um botão (ou colocar o código direto em um botão em alguns casos).
Espero que comeeece a te ajudar.

 
Postado : 20/07/2010 1:57 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

Ok, entendo os motivos de não baixar a planilha.
Por isso, vou mencionar o que contém nela:

Na plan2, tem os dados dos cadastros (a1 = nome, b1 = endereço). Daí, vem os nomes: joão, que mora em tal lugar, maria que mora em tal lugar e josé que mora em tal lugar.

Na plan1, na célula b1, inseri uma caixa de combinação que recupera os valores da plan2, coluna a. Selecionando o nome através da caixa de combinação, aparecerá, na célula b2, o nome, e, na célula b3, o endereço cadastrados (não como fórmulas, mas como valores).

O que eu quero fazer: o usuário irá alterar os dados recuperados nas células b2 e b3 da plan1, clicará em um botão que acionará uma macro que irá alterar os dados na plan2 de acordo com os dados informados na plan1. Preciso, apenas, da macro que irei inserir neste botão.

Eu inseri a macro abaixo, mas ela tem um problema: altera somente os dados na plan2, célula b2.

Sub alterar()
With Worksheets("dados")
Worksheets("dados").Range("a2").Value = Range("b2").Value
End With
End Sub

Obrigado pela ajuda.

 
Postado : 20/07/2010 2:15 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
Topic starter
 

E você quer alterar quais dados além de B2? Não ficou claro pra mim.
Se você quer copiar também de B3, você poderia usar, por exemplo:
Sheets("dados").Range("A3").Value = Sheets("???").Range("B3").Value.
Se não for isso, me explica o que seria, por favor.
***
Algumas dicas: Quando você estiver trabalhando com duas planilhas distintas, procure nomear completamente o endereço do Range.
Assim, você poderia usar: Sheets("dados").Range("A2").Value = Sheets("???").Range("B2").Value.
A estrutura do With (Com) deve ser usada para abreviar os códigos que se fazer a mesma referência ao determinado por With.
Logo, o uso deveria ser (exemplo):
With Sheets("blabla")
.Range("A2").Value = "Sim"
.Range("A3").Value = "Não"
.Activate
End With
Entendeu? (o ponto com o restante do comando é a continuação do "Com a planilha "dados"). Isso serve para quando a gente faz muitas coisas com um mesmo "objeto".
Mas, no caso, você pode usar direto o Worksheets("dados").Range("a2").Value = Range("b2").Value, sem with, que no caso não está fazendo nada no seu código.

 
Postado : 21/07/2010 9:04 am