O VBA atualiza a célula errada

0

Recentemente, comecei um novo trabalho. É uma posição de gerência e a empresa não tem muito em termos de departamento de TI. Como tal, tenho tentado criar minhas próprias ferramentas de gerenciamento. Meus colegas também têm medo do Access e não querem nenhum envolvimento em nada que eu crie através disso. A razão pela qual considero relevante mencionar isso é porque a solução mais óbvia para o meu problema atual é 'apenas use o Access', que eu posso ter que fazer caso aconteça que estou fora da minha profundidade aqui.

Uma das ferramentas nas quais estou trabalhando no momento é um plano de sucessão / matriz de habilidades. Em uma planilha, tenho uma lista de tarefas necessárias conforme a descrição do trabalho de um funcionário e se eles precisam ou não de treinamento.

Gostaria que toda a interação do usuário ocorresse em uma planilha de 'pesquisa', para que os dados do 'back-end' não sejam manipulados na fonte manualmente por ninguém, exceto por mim, se necessário. Após executar uma pesquisa, uma macro gravada copia, cola e formata um conjunto de fórmulas de Correspondência de Índice de outra planilha para apresentar os resultados. Nesse caso, uma lista de funcionários em que o treinamento completo é 'Não'.

A partir dos resultados desta lista, gostaria que o usuário pudesse selecionar a célula que deseja atualizar e clique em um botão para atualizar a célula de origem de um 'Não' para um 'Sim'. O abaixo foi o meu palpite sobre como conseguir isso. Não sei nada sobre VBA.

Sub updateyes()

SendKeys "(^[)"
Worksheets("Sheet1").Activate
ActiveCell.Value = "Yes"
Sheets("Search & Update").Select
Range("A6").Select


End Sub

A chave de envio por si só consegue mover-se para a célula de origem e selecioná-la. Como um todo, o código acima apenas atualiza a célula selecionada pela última vez manualmente na planilha 'back-end'.

Não consigo fazer com que o código faça referência a uma célula em particular, pois depende de qual célula está sendo selecionada no momento pelo usuário.

O que eu quero alcançar em resumo é o seguinte:

O usuário seleciona a célula para atualizar, clica no botão. A macro viaja para a célula de origem selecionada, atualiza de não para sim e retorna para a planilha de 'pesquisa'.

Fácil não? Pelas respostas que já tive, parece que posso estar fora do meu alcance. Muito obrigado antecipadamente.

user515914
fonte
2
Você pode fornecer mais detalhes sobre o problema que está tentando resolver com o código? Parece que o uso de sendkeys não seria uma boa solução (geralmente não é); portanto, se conhecermos todo o seu problema, poderemos ajudar a fornecer uma solução geral melhor.
Eric F

Respostas:

3

Seu código é muito frágil Selecte Activate, além de fazer referência implícita à pasta de trabalho e à planilha ativas.

Worksheets("Sheet1").Activate '~> implicitly refers to ActiveWorkbook
ActiveCell.Value = "Yes" '~> implicitly refers to ActiveSheet
Sheets("Search & Update").Select '~> implicitly refers to ActiveWorkbook
Range("A6").Select '~> implicitly refers to ActiveSheet

Este será seu amigo:

Dim sheetOne As Worksheet
Set sheetOne = Worksheets("Sheet1")

Dim searchSheet As Worksheet
Set searchSheet = Worksheets("Search & Update")

Agora, em vez de selecionar e ativar coisas, use essas referências explícitas .

Em vez disso:

ActiveCell.Value = "Yes"

Faça isso:

sheetOne.Range("A6").Value = "Yes"

(se é isso que seu código pretende fazer - não está muito claro o que deveria estar fazendo)

Mathieu Guindon
fonte
Isso é algo que eu tentaria recomendar a ele também. Ainda não está claro o que o OP está tentando alcançar, mas referenciar chamadas sólidas em vez de usar chaves de envio, seleciona e ativa é uma abordagem muito melhor.
Eric F
Sua resposta foi útil como um tutorial sobre declarações vba. No entanto, conforme detalhado na minha pergunta agora editada, não posso fazer referência a uma célula específica, pois depende da célula de origem da célula que o usuário selecionou. Algum conselho adicional?
precisa saber é o seguinte