Создайте диапазон, используя именованные ячейки

Мне нужно создать диапазон, используя именованные ячейки в vba.

Пока у меня есть следующее, что не работает;

Dim pasteRange As Range
Set pasteRange = Range(firstRow, 11)

pasteRange.Value(11) = slabTemplateSheet.Range("slabTemp").Value(11)

Где firstRow - целое число. slabTemplateSheet относится к рабочему листу, а slabTemp - это именованный диапазон на указанном листе.

Я думал, что это будет довольно просто, поскольку мой диапазон вставки составляет всего 1 строку и 11 столбцов (т.е. 11 ячеек подряд), но я не могу заставить его работать.

В своем ответе, предполагая, что он есть, не могли бы вы также дать мне возможность вставлять несколько строк и столбцов, например, если slabTemp относится к A1: F16

Изменить: я не пояснил, что пытаюсь сделать.

У меня есть именованный диапазон под названием slabTemp на листе slabTemplateSheet. На другом листе я хочу скопировать этот диапазон, включая форматирование, и вставить его. Я слышал, что использование функции копирования / вставки было медленным, поэтому я обнаружил свойство выше, которое предположительно делает то же самое, но работает быстрее (я его не тестировал). Источник, ответ Дургеша здесь: быстрый способ скопировать форматирование в Excel

На новом листе мне нужно вставить его в диапазон, который должен быть создан (это то, что я не знаю, как это сделать)

Таким образом, Range (firstRow, 11) относится к целому числу, сохраненному как firstRow (номер строки), а 11 - это номер столбца. Но это не работает.

Я предполагаю, что мой вопрос: как мне создать диапазон, используя имена, а не говорить Range ("A1: G6"), поэтому вместо Range (firstRow1: secondRow: 6)

Еще раз спасибо!


person ChrisBull    schedule 02.09.2016    source источник
comment
Что такое свойство Range.Value (11)? Вы путаете перечисление xlRangeValueXMLSpreadsheet XlRangeValueDataType с одиннадцатью столбцами?   -  person    schedule 02.09.2016
comment
@Jeeped Я пытаюсь установить значение одного диапазона на значение нового диапазона, я обнаружил это свойство здесь, в ответе Дуреша stackoverflow.com/questions/8617162/   -  person ChrisBull    schedule 02.09.2016


Ответы (3)


Вот рабочий пример.

Public Sub CopyRange()
    'Define the Copy Range
    Dim CopyRange As Range: Set CopyRange = Range("MyCustomRange")
    'Define the range to Paste Value to
    Dim PasteRange As Range: Set PasteRange = Range("MyOtherCustomRange")
    'Move the Copy Range into the Paste Range
    'You don't need to specify the sheet name, the Defined named holds that information
    'Important: The ranges should be the same size, otherwise you may get an error
    PasteRange.Value() = CopyRange.Value()
End Sub
person Ryan Wildry    schedule 02.09.2016

О том, как создать именованный диапазон (область листа, а не рабочая книга в вашем коде), используйте приведенный ниже код. Не уверен, чего вы пытаетесь достичь в этой строке:

pasteRange.Value(11) = slabTemplateSheet.Range("slabTemp").Value(11)

В любом случае, это код именованного диапазона:

Sub UseNamedRange()

Dim slabTemplateSheet       As Worksheet
Dim pasteRange              As Range

Set slabTemplateSheet = Sheets("Sheet1")

' create the Named Range "slabTemp" (Named Range for Worksheet)
' you can manualy (or with variables) modify the Range("A1:F16")
slabTemplateSheet.Names.Add "slabTemp", Sheets("Sheet1").Range("A1:F16")
Set pasteRange = slabTemplateSheet.Range("slabTemp")

End Sub
person Shai Rado    schedule 02.09.2016

Не похоже, что вы пытаетесь передать xlRangeValueXMLSpreadsheet перечисление XlRangeValueDataType ячеек; скорее похоже, что вам нужно 11 ячеек подряд.

with slabTemplateSheet.Range("slabTemp")
    pasteRange.Resize(1, 11) = .Cells.Resize(1, 11).Value
end with
person Community    schedule 02.09.2016