我有以下函数从命名范围中检索值:
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 :(得分: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)