更新命名范围内的特定值?

时间:2016-01-28 15:19:24

标签: vba excel-vba named-ranges excel

我有以下函数从命名范围中检索值:

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

想法?

2 个答案:

答案 0 :(得分:2)

您需要使用sub而不是函数。

两个您可以使用Range.Find方法查找单元格。然后使用offset来更改值。

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 :(得分:1)

您可以使用匹配功能确定范围内每个 settingName 的位置:

  

WorksheetFunction.Match方法

     

返回数组中项的相对位置(数组:用于构建生成多个结果的单个公式,或者对按行和列排列的一组参数进行操作。数组范围共享一个公共公式;数组常量是一组用作参数的常量。)以指定的顺序匹配指定的值。当您需要某个范围内的项目位置而不是项目本身时,请使用MATCH而不是其中一个LOOKUP函数。

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