Я недавно начал новую работу. Это руководящая должность, и у компании нет особого подхода к ИТ-отделу. Поэтому я пытался создать свои собственные инструменты управления. Мои коллеги также боятся доступа и не хотят участвовать ни в чем, что я создаю через это. Причина, по которой я чувствую, что это уместно упомянуть, заключается в том, что наиболее очевидное решение моей нынешней проблемы - это «просто использовать Access», что мне может потребоваться в конечном итоге, если окажется, что я здесь не в себе.

Одним из инструментов, над которым я сейчас работаю, является матрица навыков / план преемственности. На одном рабочем листе у меня есть список задач, которые требуются согласно должностной инструкции сотрудников и требуют ли они обучения.

Я хотел бы, чтобы все взаимодействие с пользователем происходило на листе «поиска», чтобы данные «бэкэнда» не обрабатывались в источнике кем-либо вручную, кроме меня в случае необходимости. После выполнения поиска записанный макрос копирует, вставляет и форматирует набор формул индекса соответствия с другого листа для представления результатов. В этом случае список сотрудников, для которых обучение завершено, - «Нет».

Из результатов этого списка я хотел бы, чтобы пользователь мог выбрать ячейку, которую он хочет обновить, и нажать кнопку, чтобы обновить исходную ячейку с «Нет» до «Да». Ниже было мое предположение о том, как этого добиться. Я ничего не знаю о VBA.

Sub updateyes()

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


End Sub

Сам по себе sendkey успешно перемещается в исходную ячейку и выбирает ее. В целом, приведенный выше код просто обновляет любую ячейку, которая была в последний раз выбрана вручную на листе «бэкэнд».

Я не могу сделать так, чтобы код ссылался на ячейку, в частности, поскольку это зависит от того, какая ячейка в данный момент выбирается пользователем.

В итоге я хочу добиться этого:

Пользователь выбирает ячейку для обновления, нажимает кнопку. Макрос перемещается в выбранную исходную ячейку, обновляется с «нет» на «да», возвращается на лист поиска.

Легко нет? Судя по ответам, которые я уже получил, я могу быть вне своей лиги. Спасибо заранее.

1 ответ1

3

Ваш код опирается на очень хилые « Select и Activate , помимо неявной ссылки на активную книгу и активный лист.

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

Это будет ваш друг:

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

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

Теперь вместо выбора и активации вещей используйте эти явные ссылки.

Вместо этого:

ActiveCell.Value = "Yes"

Сделай это:

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

(если это то, чем должен заниматься ваш код - не очень понятно, что он должен делать)

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .