Установить именованные диапазоны как целые числа - PullRequest
1 голос
/ 20 января 2020

Я относительно новичок в VBA и в настоящее время пытаюсь упростить свою жизнь, ссылаясь на именованные диапазоны, а не на указание c ячеек (я все еще работаю над общей книгой, и не хочу продолжать менять ссылки каждый раз, когда клетка перемещается). Насколько я знаю, не должно быть большой проблемой использовать именованный диапазон, а не адрес ячейки?

Приведенный ниже код является специфической c частью большего кода, над которым я работаю на. Он просто вводит значение из одной ячейки (которая содержит формулу на листе) в ячейку над ней. Я могу сделать это с помощью кода "wsi.Cells (19, 10) .Value = Cells (20, 10) .Value", но я не могу заставить его работать, используя именованные диапазоны, заданные как целые числа).

Я пробовал пару вариантов, но я продолжаю сталкиваться с ошибками, поэтому любой совет будет отличным!

Редактировать: Удалил пару строк кода, не относящихся к посту.

Sub Test1()

Application.CutCopyMode = False

Dim wsi         As Worksheet
Dim StartA      As Integer
Dim StartB      As Integer

Set wsi = Worksheets("Input")

StartA = wsi.Range("In_StartA")
StartB = wsi.Range("In_StartB")

StartA = StartB

End Sub

1 Ответ

2 голосов
/ 20 января 2020

Вы должны определить их как Range, а не Integer.

Следующие 2 строки одинаковы.

StartA = wsi.Range("In_StartA")
StartA = wsi.Range("In_StartA").Value

Если вы опустите .Value, это все еще дефолт. Но во второй строке вы ясно видите, что происходит: значение диапазона In_StartA записывается в переменную StartA (ссылка на диапазон отсутствует, поскольку StartA является цифрой c значение Integer, а не объект диапазона).

Но если вы объявите переменные как диапазоны…

Dim StartA      As Range
Dim StartB      As Range

… и установите переменные в диапазон…

Set StartA = wsi.Range("In_StartA")
Set StartB = wsi.Range("In_StartB")

… тогда следующая строка изменит значение в ячейке In_StartA

StartA = StartB 

… потому что оно на самом деле совпадает с

StartA.Value = StartB.Value

… где вы можете четко видим, что обе переменные являются объектами диапазона.

Таким образом, должно работать следующее:

Sub Test1()
    Application.CutCopyMode = False

    Dim wsi         As Worksheet
    Set wsi = ThisWorksheet.Worksheets("Input")

    Dim StartA      As Range
    Set StartA = wsi.Range("In_StartA")

    Dim StartB      As Range        
    Set StartB = wsi.Range("In_StartB")

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