Установите переменную для ссылки на лист - PullRequest
0 голосов
/ 22 октября 2019

Могу ли я установить переменную x = "Sheet1", чтобы сделать: x.Range ("A3") вместо Sheet1.Range ("A3")?

Какой тип переменной следуетбыть? Я попробовал строку, и она не сработала.

Спасибо

Обновление: я хотел бы, чтобы метод, на который изменение имени листа не повлияло, не затронул. то есть Sheet1.Range («A3») всегда будет ссылаться на один и тот же лист, даже если я изменю имя листа на «арахис», по крайней мере, так я думал.

Ответы [ 4 ]

5 голосов
/ 22 октября 2019

Вы хотите объявить его объектом рабочего листа:

Dim x as WorkSheet

Поскольку это объект, мы должны Set лист:

Set x = WorkSheets("Sheet1")

или если вы хотите использоватькодовое название:

Set x = Sheet1

Тогда да, вы можете использовать его:

x.Range("A3")...
1 голос
/ 22 октября 2019

Я думаю, что вы смешиваете два разных объявления

Объявление листа (необходимо set лист)

dim ws as worksheet
set ws = sheets("sheet1")
ws.cells(1,1).value = ""

Объявление строки в качестве имени листа (можно использоватьИМЯ листа в виде строки)

dim ws_name as string
ws_name = "sheet1"
sheets(ws_name).cells(1,1).value = ""

Кроме того, вы можете использовать индекс листа, который не использует имя листа (если вы измените его позже);это немного отличается от предыдущих двух, но этот пример (с использованием цикла) помогает более четко объяснить, как можно использовать индекс

dim i as long
for i = 1 to sheets.count step 1
    sheets(i).cells(1,1).value = ""
next i

и простое использование индекса листа

sheets(1).cells(1,1).value = ""
0 голосов
/ 22 октября 2019

Требуется переменная 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
0 голосов
/ 22 октября 2019

Это должен быть рабочий лист. Синтаксис будет:

Dim x as Worksheet
Set x = Sheet1

, после чего вы можете использовать x.range("A3") для ссылки на ячейку A3 в листе 1

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...