Мне было интересно, есть ли индикатор для рабочего листа в Excel. Допустим, у меня есть код VBA, который в какой-то момент использует Имя рабочего листа, затем я изменяю имя рабочего листа, поэтому мне нужно изменить это имя и в моем коде. Есть ли способ использовать индикатор для рабочего листа, чтобы мне не пришлось менять это имя в моем коде? Или любой другой способ использовать лист в коде, не используя его имя?

Спасибо за помощь.

1 ответ1

1

В зависимости от контекста у вас есть несколько вариантов.

1. Используйте константу

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

Set shtSheet = sheets("Sheet1")

Вы можете использовать:

Set shtSheet = Sheets(csSource)

на протяжении.

Объявите константу, используя Const <name> as <type> = <value>

Sub WorksheetVar()
    Const csSheetName As String = "Test"

    Sheets(csSheetName).Range("A1").Value = 1
    Sheets(csSheetName).Range("A2").Value = 2
    Sheets(csSheetName).Range("A3").Value = 3
End Sub

Он не избавляется от необходимости устанавливать значение в коде, но позволяет легче обновлять его, а не искать код для всех мест, где используется имя.

2. Используйте номера индекса

Каждый лист имеет номер, а также имя, обычно положение листа во вкладках. Это останется прежним, даже если имя листа будет изменено, но оно изменится, если изменится порядок вкладок.

3. Используйте переменную

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

4. Используйте имя объекта листа

Независимо от отображаемого имени листа каждый лист имеет имя объекта, обычно это имя, которое он имел при первом создании. Если вы посмотрите на проводник проектов слева, то увидите, что каждый лист указан как «Лист1 (Лист1)». Если вы изменили имя Sheet1 на Test, вы увидите Sheet1 (Test) . Вы можете использовать это неизменное имя объекта для ссылки на лист по мере необходимости, как если бы это была переменная.

Sub Sheetname()
    Sheet1.Range("A1").Value = 1
    Sheet1.Range("A2").Value = 2
End Sub

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

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