2

Я хотел бы выполнить итерацию по строкам на рабочем листе и присвоить полям имен одного столбца (столбец E) значение соответствующей строки в другом столбце (столбец B).

Я хотел бы сделать это таким образом, потому что принцип останется неизменным для добавления, которое будет внесено в этот сценарий для долгосрочного обслуживания. Например, если бы я делал это вручную, я бы активировал ячейку "E2", щелкнул поле с именем и набрал "Coil_Width", который является значением ячейки "B2". Это правильно добавляет имя в менеджер имен, и я могу динамически изменить значение, набрав что-то в строке формул для этой ячейки. Я пытался назначить через eCell.Свойство Name = (и т.д.), Но, похоже, оно не работает для ячеек так же, как для свойства range, потому что я получаю ошибку, определенную приложением (1003).

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

ActiveWorkbook.Names.Add Name:=bCell.Value, RefersTo:= eCell.Address()

просто добавляет имя в диспетчер имен и устанавливает для RefersTo значение «$ E $ 2» или любую другую ячейку (я думаю, что это правильно), но значение также устанавливается на "E2" (и не может быть изменено даже при вводе вручную значение в строке формул для этой ячейки. Кроме того, поле имени для этой ячейки по-прежнему отображается как "E2".

Вот пример кода:

For Each bCell In thisWkSht.Range("B:B").Cells
'For Each bCell In thisWkSht.Range("B:B:) - this is the changed line
If bCell.Value = "" Then
    'Do Nothing
ElseIf bCell.Value = "Variables" Then
    'Do Nothing
    'This allows me to skip the first row without much hassle
Else
    Set eCell = bCell.Offset(0, 3).Cells 
    'Set eCell = bCell.Offset(0, 3) - this is the other changed line
    eCell.Name = bCell.Value ' This line now correctly assigns the value from my
                             ' B row and column to the name of my E row cell

End If
Next

Мои результаты показывают, что я могу правильно получить доступ к bcell.Значение свойства, но оно ломается во время bCell.Название.Название. Мне кажется, что я просто должен быть в состоянии сделать что-то вроде eCell.Имя = bCell.Значение или что-то подобное, но я еще не получил ничего, кроме ошибки, определенной приложением.

В настоящее время я придерживаюсь метода ячеек, потому что я не уверен, как обратиться к изменяющемуся диапазону выбора в операторе For Each; то есть я могу понять, как обращаться к моей ячейке bCell по всему диапазону («B:B»), но я не знаю, как настроить мою ячейку eCell таким образом, чтобы диапазон, на который она ссылалась, был на самом деле диапазоном смещения bCell на три колонны.

Я что-то упускаю из этих свойств?

1 ответ1

0

Все, что вам нужно, это изменить эту строку:

Set eCell = bCell.Offset(0, 3).Cells 

К этому:

Set eCell = bCell.Offset(0, 3)

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