Jump to content
Fórum Script Brasil
  • 0

(Resolvido) Salvar referência de uma célula de uma planilha em outra p


rhbohrer
 Share

Question

Bom dia caros,

Estou fazendo uma aplicação em VBA usando o Excel para cadastro de projetos com vários 'forms'

O primeiro 'form' chama-se frmCLIENTES que cadastra os dados do cliente

O segundo 'form' chama-se frmPROJETOS que cadastra os dados do projeto

Estou fazendo assim porque podem existir vários projetos para cada cliente.

Os dados do 'form' frmCLIENTES salva na planilha CLIENTES, e o 'form' frmPROJETOS salva na planilha PROJETOS.

No frmPROJETOS tenho uma ComboBox que lista o nome de todos os clientes cadastrados na planilha CLIENTES.

Quando eu salvo o projeto, o valor da ComboBox é salvo na coluna A da planilha PROJETOS.

Até ai tudo certo. O problema vem agora:

Eu não gostaria de salvar o valor da ComboBox, gostaria de salvar a referência da célula na planilha CLIENTES onde está localizado o respectivo cliente, ou seja, na coluna A da planilha PROJETOS salvar =CLIENTES!A2 ao invés do valor apresentado na ComboBox.

Por que isto? Porque quando eu editar o nome do cliente, os projetos associados tenha o registro também alterado de forma automática.

Alguém saberia me ajudar com qual linha de comando eu posso fazer isso?

A planilha CLIENTES está assim:

yhRefY.jpg

E gostaria que a planilha PROJETOS ficasse assim:

WGvgxE.jpg

Claro que no Excel a célula A2 em PROJETOS exibiria o valor "CLIENTE 1"

Obrigado.

Rafael.

Edited by rhbohrer
Link to comment
Share on other sites

1 answer to this question

Recommended Posts

  • 0

Eu não sei se é a forma mais fácil, mas fiz da seguinte forma:

Gravei uma macro fazendo a pesquisa, depois selecionei a célula e copiei. Fui para a outra planilha e colei como vínculo.
Após editei a macro e ela ficou assim:

Sub VINCULO_CLIENTE_PROJETO()
' VINCULO_CLIENTE_PROJETO Macro

    'Seleciona a planilha CLIENTES
    Worksheets("CLIENTES").Select
    
    'Cria duas variáveis: varProcura recebe o valor da ComboBox BOX_NOME_CLIENTE e a varRegistros recebe a contagem de quantas linhas foram usadas na planilha CLIENTES
    varProcura = frmPROJETO.BOX_NOME_CLIENTE.Value
    varRegistros = Worksheets("CLIENTES").UsedRange.Rows.Count
    
    Range("B2:B" & varRegistros).Select 'Faz a seleção das linhas de B2 até ultima célula B com valor


    'Faz a procura usando a variável varProcura
    Selection.Find(What:=varProcura, After:=ActiveCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    
    'Move a célula ativa 1x para a direita e 1x para esquerda. Isso é para deixar selecionado somente a célula onde foi encontrado o nome
    ActiveCell.Offset(0, 1).Select
    ActiveCell.Offset(0, -1).Select


    Selection.Copy 'Faz a cópia da selecão (CTRL + C)
End Sub

E quando clico no botão SALVAR, antes de gravar os outros dados dos campos do formulário, ele cola o vínculo na próxima célula livre

Private Sub BT_SAVE_PROJETO_Click()
    
    'Cria duas variáveis: varTotalRegProjeto armazena a quantidade de linhas usadas na planilha PROJETOS. varSalvaProjeto armazena o conteúdo da variável anterior e soma 1 para seleciona a linha logo abaixo da última com valor existente
    varTotalRegProjeto = Worksheets("PROJETOS").UsedRange.Rows.Count
    varSalvaProjeto = varTotalRegProjeto + 1


    VINCULO_CLIENTE_PROJETO 'Chama a macro de pesquisa 
    Worksheets("PROJETOS").Select 'Seleciona a planilha PROJETOS
    Cells(varSalvaProjeto, 1).Select 'Seleciona a célula na linha vazia e na primeira coluna
    ActiveSheet.Paste Link:=True 'Faz a colagem da cópia feita na macro em forma de vínculo
    
    'A partir daqui salva os demais campos, cada um em uma coluna específica mas na mesma linha.
    Cells(varSalvaProjeto, 2) = TEXT_NOME_PROJETO
    Cells(varSalvaProjeto, 3) = TEXT_CONTATO
    Cells(varSalvaProjeto, 4) = TEXT_TELEF_CONTATO
    Cells(varSalvaProjeto, 5) = TEXT_EMAIL_CONTATO
End Sub

Fiz assim e deu certo.

Como disse, não sei se é a mais fácil, mas como não encontrei nada na internet, quebrei a cabeça, mas consegui.

Se alguém tiver uma forma mais fácil, compartilha aí.

Edited by rhbohrer
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...