Как вернуться к исходному листу после выполнения макроса?

Вопрос или проблема

Я изучаю VBA через эксперименты и онлайн-исследования. Пожалуйста, дайте знать, если есть что-то, что следует улучшить или удалить из моего текущего тестового кода, который работает.

Я просто хочу уменьшить любые лишние строки, которые не будут нужны. Любые советы будут полезны.

ресурс: https://forum.ozgrid.com/forum/index.php?thread/82720-store-current-sheet-name-as-variable/

Sub Test_return_from_start()

Dim WSD As Worksheet
Dim DataSheetName As String

Set WSD = ActiveSheet
DataSheetName = ActiveSheet.Name

'начало действий, которые нужно выполнить
Sheet7.Select    
    Range("B2").Select
    ActiveCell.FormulaR1C1 = "test"

'возвращение обратно к исходному листу
Sheets(DataSheetName).Activate

End Sub

Вам не нужно выбирать ячейку, чтобы изменить ее значение.

Вместо использования ActiveSheet/ActiveCell вы можете использовать свойства/методы объекта рабочего листа для прямого изменения рабочего листа.

Смотря на Project Explorer в VBA IDE, для каждого рабочего листа у вас будет запись. Каждая запись – это ObjectName (SheetName).

ObjectName может быть использовано как ссылка на рабочий лист (например, Sheet7 в вашем коде), если рабочие листы не добавлены в вашу книгу, то это довольно безопасно использовать, вы также можете создать свои собственные ссылки (аналогично WSD в вашем примере).

Dim Sheet As Worksheet
Set Sheet = ThisWorkbook.Worksheets("Sheet1") 

Ваш пример кода может быть упрощен до одной строки.

Sub Example()
Sheet7.Range("B2").FormulaR1C1 = "test"
End Sub

Вы также можете создать объект Range, если собираетесь выполнять несколько задач на этом диапазоне/ячейке.

Sub Example()
Dim R As Range
Set R = Sheet7.Range("B2")
R.FormulaR1C1 = "test"
R.Interior.ColorIndex = 7 ' Установить цвет фона
End Sub

Ответ или решение

Как вернуться к исходному листу после выполнения макроса в VBA

При написании макросов на VBA важно как можно более эффективно использовать доступные инструменты, чтобы выполнить задачи, избегая лишних строк кода и повышая читаемость программы. В вашем случае главной целью является возвращение к исходному листу после выполнения наших действий на другом листе. Давайте рассмотрим, как оптимизировать ваш код для достижения этой цели.

Шаг 1: Хранение имени исходного листа

Первый шаг – это сохранить имя текущего листа перед его изменением. Это позволяет нам легко к нему вернуться. Вместо использования ActiveSheet, более надежным подходом будет частичное использование объекта, чтобы минимизировать зависимость от состояния интерфейса пользователя.

Шаг 2: Избегание использования Select и Activate

Если это возможно, всегда следует избегать использования методов .Select и .Activate. Работа с объектами напрямую делает код более стабильным и производительным. Это также избежит ненужных переключений на другие листы, что может снизить скорость выполнения макроса.

Пример оптимизированного кода

Ниже представлен оптимизированный вариант вашего макроса, который уменьшает количество строк и повышает эффективность:

Sub Test_return_from_start()
    Dim WSD As Worksheet
    Dim TargetSheet As Worksheet

    ' Сохранение ссылки на текущий лист
    Set WSD = ActiveSheet

    ' Определение листа, на котором будут проводиться действия
    Set TargetSheet = ThisWorkbook.Sheets("Sheet7")

    ' Выполнение необходимых действий на целевом листе
    TargetSheet.Range("B2").FormulaR1C1 = "test"

    ' Возвращение к исходному листу
    WSD.Activate
End Sub

Пояснение кода

  1. Сохранение ссылки на текущий лист: Мы сохраняем ссылку на текущий лист (WSD), что позволяет вернуться к нему после выполнения действий на другом листе.

  2. Работа с целевым листом: Обратите внимание на использование ThisWorkbook.Sheets("Sheet7"). Это позволяет явно указать, с каким листом мы работаем, что делает код более понятным.

  3. Прямое изменение значений: Мы изменяем значение в ячейке B2 на листе Sheet7 без необходимости в использовании Select.

  4. Возврат к исходному листу: Вернуться к исходному листу можно легко, активировав его, используя сохраненную ссылку.

Заключение

Использование правильных подходов и методов в VBA не только упрощает код, но и делает его более читабельным и поддерживаемым. Избегая лишних операций выбора и активации, вы сможете обеспечить более полное внимание к бизнес-логике вашего приложения, а не к пользовательскому интерфейсу. Надеюсь, что предложенная информация окажется полезной для вашей практики программирования на VBA.

Оцените материал
Добавить комментарий

Капча загружается...