Невозможно заполнить именованный диапазон - PullRequest
0 голосов
/ 28 сентября 2019

Я столкнулся с проблемой, которую не могу решить самостоятельно, и мне было интересно, может ли кто-нибудь здесь научить меня тому, что я делаю неправильно?Цель кода - перенести ряд информации (около 60 ячеек) на другой лист.

-

Для большей ясности (мой последний вопрос было трудно понять):

RProjekt содержит следующие ячейки: E6; F15; F17; F19; F21; F23; I6; I8; I10; I15; I17; I19; I21; I23

RBkriterier содержит следующие ячейки:F30: K30; F31: K31; F32: K32; F33: K33; F34: K34

Ополаскиватель содержит следующие ячейки: F45: K45; F46: K46; F47: K47; F48: K48; F49: K49

-

Надеюсь, приведенный ниже код иллюстрирует то, что я пытаюсь достичь.Какие-либо предложения?Благодарен за помощь!

-

Dim Bkriterier As Range
Dim Pinformation As Range
Dim inser As Range
Dim AllProjectInformation as range

Set Pinformation = InputSheet_Utveckling.Range("RProjekt") '"InputSheet_Utveckling" is a worksheet
Set Bkriterier = InputSheet_Utveckling.Range("RBkriterier") ' The "R ..." are named ranges consisting of several cells
Set inser = InputSheet_Utveckling.Range("Rinser")
Set AllProjectInformation = Union(Pinformation, Bkriterier, inser)


Dim i As Integer
For i = 1 To AllProjectInformation.Cells.Count
    AllProjectInformation.Areas(i) = projectRow.Range(i) '"projectRow is from another routine that goes through a table looking for a project code. Once found, that specific row is (and the "address") is stored in projectRow of type ListRow
Next i

1 Ответ

1 голос
/ 29 сентября 2019

Вот сравнение нерабочего (для счетчика цикла) и рабочего (для каждого цикла) подходов к заполнению объединенного несмежного диапазона из одного смежного диапазона:

Sub Tester()

    Dim rngMerged As Range, rngRow As Range, c As Range
    Dim i As Long

    'Yellow and grey areas
    Set rngMerged = Application.Union(Range("B2:B6"), Range("D2:D6"))

    'Green-shaded area
    Set rngRow = Range("F2:O2")

    'Here we're trying to fill rngMerged cell-by-cell from rngRow...

    'Method 1 - does not work as expected
    For i = 1 To rngMerged.Cells.Count
        rngMerged.Cells(i).Value = rngRow.Cells(i).Value
    Next i

    'Method 2 - fills as expected
    i = 0
    For Each c In rngMerged.Cells
        i = i + 1
        c.Value = rngRow.Cells(i).Value
    Next c

End Sub

Результат метода 1: используя счетчик цикла For, мы в конечном итоге заполняем только первую область объединенного диапазона (а затем расширяемся за пределы этой области по мере прохождения цикла)

enter image description here

Результат метода 2: метод For Each зацикливания в объединенном диапазоне попадает в каждую ячейку, как и ожидалось, и мы можем надежно индексировать в единый диапазон rngRow.Cells, используя i

enter image description here

Примечание: порядок объединения диапазонов будет влиять на порядок зацикливания ячеек в цикле For Each, поэтому у вас есть некоторыеуправляйте там, как ячейки в вашей объединенной области отображаются на ячейки в вашем projectRow исходном диапазоне.

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