Вопрос или проблема
Я изучаю 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
Пояснение кода
-
Сохранение ссылки на текущий лист: Мы сохраняем ссылку на текущий лист (
WSD
), что позволяет вернуться к нему после выполнения действий на другом листе. -
Работа с целевым листом: Обратите внимание на использование
ThisWorkbook.Sheets("Sheet7")
. Это позволяет явно указать, с каким листом мы работаем, что делает код более понятным. -
Прямое изменение значений: Мы изменяем значение в ячейке
B2
на листеSheet7
без необходимости в использованииSelect
. -
Возврат к исходному листу: Вернуться к исходному листу можно легко, активировав его, используя сохраненную ссылку.
Заключение
Использование правильных подходов и методов в VBA не только упрощает код, но и делает его более читабельным и поддерживаемым. Избегая лишних операций выбора и активации, вы сможете обеспечить более полное внимание к бизнес-логике вашего приложения, а не к пользовательскому интерфейсу. Надеюсь, что предложенная информация окажется полезной для вашей практики программирования на VBA.