Требуется переменная Worksheet
. «Имя», на которое вы ссылаетесь - это свойство Name
, которого нет в коде;это «имя вкладки» листа , которое пользователь может изменить по своей прихоти , и по этой причине вам не нужно никуда программировать, если вы можете избежать этого.
Но похоже, что вы ссылаетесь на лист, существующий в ThisWorkbook
во время компиляции;каждый лист имеет свойство (Name)
, которое можно редактировать в окне инструментов Свойства ( F4 ). По умолчанию это имя Sheet1
, и VBA берет это имя и делает его идентификатором области проекта, который вы можете использовать везде, где вам нужно сослаться на этот конкретный лист .
Так что если выизмените (Name)
листа на PeanutsSheet
, тогда вы можете использовать PeanutsSheet
в своем коде:
PeanutsSheet.Range("A1").Value = 42 '<~ that's the "CodeName", and users can't easily break it
И это предпочтительнее, чем ссылаться на этот же лист по его "имени вкладки":
ThisWorkbook.Worksheets("Peanuts").Range("A1").Value = 42 '<~ breaks if tab is ever renamed
Объявление переменной для листа, которая существует в ThisWorkbook
во время компиляции, является полностью избыточной:
Dim ws As Worksheet
Set ws = Sheet1 '<~ variable 'ws' is 100% redundant
Использование таких переменных делает код более запутанным и труднее следовать, чем ондолжно быть, потому что теперь у вас есть 2 (или более) идентификатора, относящихся к одной и той же вещи.
Но это хуже:
Set ws = ThisWorkbook.Worksheets("Sheet1") '<~ now it's redundant *and* super frail