2016-01-28 5 views
0

У меня есть следующая функция, которая извлекает значение из именованного диапазона:Обновить определенное значение в именованном диапазоне?

enter image description here

Function getSetting(settingName As String) 
    getSetting = Application.VLookup(settingName, Range("rSettings"), 2, True) 
End Function 

Теперь я могу легко сказать myColor = getSetting("myColor") и он будет возвращать «синий» или любой другой.

Что я хочу сделать сейчас обновление это значение.

Function updateSetting(settingName As String, newValue As String) 
    ????? 
End Function 

Идеи?

+0

Привет! Откуда у вас цвет? Или, скорее, цвет чего? – Kathara

+1

Добавлен снимок экрана моего Named Range. –

ответ

2

Один из них вам понадобится, если вы не используете функцию.

Два способа вы можете использовать метод Range.Find. Затем используйте смещение, чтобы изменить значение.

Sub updateSetting(settingName As String, newValue As String) 
    Dim c As Range 
    Set c = Range("rSettings").Find(settingName) 
    c.Offset(, 1).Value = newValue 
End Sub 

Кроме того, как к вашей первой функции, личные предпочтения не использовать функцию рабочего листа, где функция VBA может быть использована. Это медленнее.

Function getSetting(settingName As String) 
    Dim c As Range 
    Set c = Range("rSettings").Find(settingName) 
    getSetting = c.Offset(, 1).Value 
End Function 
+1

Да, у меня на самом деле был суб в моем коде, но для вопроса я скопировал и вставил функцию getSetting :) –

+1

Также это работало как шарм, и спасибо за подсказку о функции getSetting! –

1

Вы можете определить местоположение каждого settingName в диапазоне, используя функцию Match:

метод WorksheetFunction.Match

Возвращает относительное положение элемента в array (array: Используется для построения отдельных формул, которые дают несколько результатов или которые работают с группой аргументов, которые расположены в строках и столбцах. Диапазон массивов имеет общую формулу: Константа массива - это группа констант, используемых в качестве аргумента.), которая соответствует заданному значению в указанном порядке. Используйте MATCH вместо одной из функций LOOKUP, когда вам нужна позиция элемента в диапазоне вместо самого элемента.

dim index 
index = Match(settingName,Range("settings"),0) 
+1

'Матч' - это то, над чем я работал, но я продолжал получать' Ошибка 2042' или еще что-то. Спасибо за ответ, но работа @Scott Craner великолепна и имеет для меня наибольший смысл. –