Сохранить значения именованных диапазонов как переменные - PullRequest
0 голосов
/ 12 апреля 2020

Я пытаюсь сохранить именованный диапазон таким образом:

    Dim sValue As String
sValue = ThisWorkbook.Names("MyRange").Value

Я получил адрес диапазона вместо значений в именованном диапазоне. Что я пытаюсь сделать именно так: предположим, что именованный диапазон - «MyRange» и предназначен для A1: C4 Если в ячейке мы набрали знак равенства и набрали «MyRange», а затем нажали F9, мы получили значения в виде массива вот так

{"Head1","Head2","Head3";1,2,3;4,5,6;7,8,9}

Как сохранить это в переменной строке?

Ответы [ 2 ]

2 голосов
/ 12 апреля 2020

чтобы иметь переменную String в формате {"Head1", "Head2", "Head3"; 1,2,3; 4,5,6; 7,8,9}, вы можете сделать следующее

    Dim sValue As String, r As Range
    For Each r In ThisWorkbook.Names("MyRange").RefersToRange.Rows
        sValue = sValue & Join(Application.Transpose(Application.Transpose(r.Value)), ",") & ";"
    Next
    sValue = "{" & Left(sValue, Len(sValue) - 1) & "}"

, в то время как хранить именованный диапазон в массиве гораздо проще (и я бы сказал, прост в использовании):

Dim sValue As Variant
sValue = ThisWorkbook.Names("MyRange").RefersToRange.Value
0 голосов
/ 12 апреля 2020

Я думаю, вы ищете

sValue = ThisWorkbook.Names("MyRange"),name

, чтобы найти все имена в Activesheet:


Sub test_names()
    Dim wsName As String
    wsName = ActiveSheet.Name
    Dim nameRange As Variant
    For Each nameRange In ThisWorkbook.Names
        Set rngName = Range(nameRange)
        wsParentName = rngName.Parent.CodeName
If (wsParentName = wsName) Then
Debug.Print "Found range " & nameRange.Name
End If
    Next nameRange
End Sub

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