VBA: Как отобразить значение ячейки по определенному имени? - PullRequest
1 голос
/ 07 октября 2010

У меня уже есть определенное имя для определенного столбца в моей рабочей таблице.Как отобразить значение ячейки по определенному имени?

Я пробовал это:

  Public Sub Test()
    Dim R As Range
    Set R = ThisWorkbook.Names("SomeName").RefersToRange
    MsgBox CStr(R.Value)
  End Sub

, но во время выполнения произошла ошибка "Несоответствие типов" (код ошибки: 13).

Что не так с кодом?Каков фактический тип данных RefersToRange.Value?

В документации говорится, что RefersToRange возвращает объект Range, но он отличается от объекта Range, возвращаемого ActiveCell, поскольку у меня нет проблем со следующим кодом:

  MsgBox CStr(ActiveCell.Value)

Я использую Excel 2003

Ответы [ 4 ]

2 голосов
/ 07 октября 2010

Вам нужно перебрать ячейки в этом диапазоне и получить значение каждой ячейки отдельно, если диапазон охватывает несколько ячеек.В противном случае выдается ошибка.

Sub Test()

    Dim r As Range
    Dim cell As Range

    Set r = Range("Something")

    If r.Cells.Count > 1 Then
        For Each cell In r.Cells
            MsgBox cell.Value
        Next cell
    Else
        MsgBox r.Value
    End If
End Sub

Однако вы можете установить значение для всех ячеек, определенных в диапазоне, установив значение для диапазона из нескольких ячеек, например:

Sub Test()

    Dim r As Range

    Set r = Range("Something")

    r.Value = "Test"
End Sub
2 голосов
/ 07 октября 2010

RefersToRange возвращает объект Range.Я предполагаю, что вы получаете несоответствие типов на линии Cstr.Если диапазон имеет несколько ячеек, свойство Value возвращает массив Variant.Сделайте это в Immediate Window (Control + G в VBE).

?typename(thisworkbook.Names("SomeRange").RefersTorange)
Range
?typename(thisworkbook.Names("SomeRange").RefersToRange.Value)
Variant()

Функция CStr не может обработать аргумент массива, поэтому вы получаете эту ошибкуВы можете перейти к определенной ячейке в диапазоне, например, к первой ячейке, например,

ThisWorkbook.Names("SomeRange").RefersToRange(1).Value

, или пройти через нее, как подсказывает Финк.

1 голос
/ 07 октября 2010

Вы можете просто указать имя для свойства Range (или даже Cells):

Set R = ThisWorkbook.Range("SomeName")
0 голосов
/ 17 июня 2016

Вы можете получить значение ячейки по ее имени следующим образом: -

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