Ссылка на ячейку только по имени столбца в Excel 2010 VBA

20725
chabzjo

В Excel 2010 мне нужно построчно просматривать таблицу данных и манипулировать данными в VBA.

Моя оригинальная функция выглядит так:

Private Function GetValue(ByVal myRange As Excel.Range, ByVal strCol As String) As String Dim myCell As Object Set myCell = myRange.Cells(, strCol)  GetValue = myCell.Value  End Function 

Я называю это так:

GetValue(myRow, "AE") 

myRowявляется Excel.Range, представляющим строку.
"AE"это индекс столбца.

Я хочу преобразовать использование имен столбцов вместо индексов столбцов, потому что пользователи могут добавлять или удалять столбцы в будущем. Я определил диапазон ячеек в виде таблицы в Excel, назвал таблицу и выбрал уникальные имена столбцов.

Это означает, что я бы сейчас вызвал функцию, используя:

GetValue(myRow, "column_name") 

но я не могу найти примеры, где я могу указать только имя столбца без указания строки.

Это вообще возможно?

2
Если вы не хотите указывать строку, как Excel / VBA узнает, какой строкой вы пытаетесь манипулировать? misha256 9 лет назад 0
Потому что я передаю строку в качестве параметра функции. chabzjo 9 лет назад 0

2 ответа на вопрос

3
chabzjo

Код из другого ответа не скомпилировался для меня, но позволил мне провести дальнейшее исследование.

Вдохновленный Как я зациклить таблицу Excel 2010, используя его имя и ссылку на столбец? и как зациклить таблицу и получить доступ к элементам строки по заголовку столбца? В итоге я использовал:

Private Function GetValue(ByVal myRange As Excel.Range, ByVal strCol As String) As String GetValue = myRange.Columns(myRange.ListObject.ListColumns(strCol).Range.Column).Value End Function 
1
Gary's Student

Рассматривать:

Public Function GetValue2(ByVal myRow As Long, ByVal strColumnName As String) As String Dim myCell As Object  Set myCell = Cells(myRow, Range(strColumnName).Column) GetValue2 = myCell.Value End Function 

В этом примере я «назвал» столбец B «qwerty»

Обратите внимание, что с этой функцией могут возникнуть проблемы с волатильностью .

Можете ли вы объяснить, что вы подразумеваете под проблемами волатильности? chabzjo 9 лет назад 0
Я имею в виду, что если вы измените содержимое столбца ** B, ** функция не будет достаточно умной, чтобы знать, что необходимо пересчитать себя. Gary's Student 9 лет назад 0
На самом деле, наличие функции, зная, что необходимо пересчитать, не является частью моих требований. Но спасибо, что подумал. :) chabzjo 9 лет назад 0