O VBA atualiza a célula errada

0

Eu iniciei recentemente um novo trabalho. É uma posição de gestão e a empresa não tem muito em termos de um 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 envolvimento em nada que eu crie por meio disso. A razão pela qual eu sinto que isso é relevante mencionar é porque a solução mais óbvia para o meu problema atual é 'apenas use o Access', o qual eu posso acabar tendo que fazer se eu estiver fora da minha profundidade aqui.

Uma das ferramentas em que estou trabalhando no momento é um plano de matriz de habilidades / sucessão. Em uma planilha, tenho uma lista de tarefas necessárias de acordo com a descrição do trabalho de um funcionário e se elas exigem ou não treinamento.

Eu gostaria que toda a interação do usuário ocorresse em uma planilha de 'pesquisa' para que os dados de 'back-end' não fossem manipulados na origem manualmente por ninguém além de mim, caso fosse necessário. Depois de executar uma pesquisa, uma macro gravada copia, cola e formata um conjunto de fórmulas Index Match de outra planilha para apresentar os resultados. Neste caso, uma lista de funcionários onde o treinamento completo é 'Não'.

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

Sub updateyes()

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


End Sub

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

Não consigo fazer o código referenciar uma célula em particular, pois depende de qual célula está sendo selecionada pelo usuário.

O que eu quero alcançar em resumo é este:

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

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

    
por user515914 30.10.2015 / 16:28

1 resposta

3

Seu código depende de Select e Activate muito frágeis, além de fazer referência implícita à planilha ativa e à planilha ativa.

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 o seu código pretende fazer - não está muito claro o que está a fazer)

    
por 30.10.2015 / 16:46