我正在尝试编写一个Excel VBA函数,它将根据工作表中其他位置的全局设置,返回两个输入参数中的一个作为输入单元格的公式。 IE,在工作表中某人设置A或B的其他地方,然后调用功能AorB的公式将根据全局设置返回A或B.
这样的事情:
Function AOrB(A As Variant, B As Variant) As Variant
If someSetting = A Then
AOrB.formula = A
ElseIf someSetting = B Then
AOrB.formula = B
End If
End Function
我的搜索量非常大,但我只是不知道输入和返回的类型以便让函数返回。
任何帮助都将不胜感激。
答案 0 :(得分:2)
从UDF更改公式不是一个好主意。这可能很复杂。
我相信你正在解释的正确方法是通过公式中的IF:
=IF(someSetting = A, AFormula, If(someSetting = B,BFormula,""))
如果someSetting
是您存储在代码中的内容,则可以创建UDF来检索该值。像这样:
Private mySetting As Variant
Function SomeSetting() As Variant
SomeSetting = mySetting
End Function
答案 1 :(得分:1)
为将保存全局设置的单元格命名,例如“ABChoice”。 (您可以通过单击公式栏左侧,显示当前单元格位置,然后输入所需名称)来执行此操作。
然后重写公式:
Function AOrB()
If ThisWorkbook.Range("ABChoice") = "A" Then
AOrB = "A"
ElseIf ThisWorkbook.Range("ABChoice") = "B" Then
AOrB = "B"
Else
AOrB = "A" 'could switch to B, whichever is the default
End If
End Function
您可以使用数据验证(在“数据”菜单下)确保用户只能输入“A”或“B”,但使用最终的Else子句会使其不必要,假设您具有所选的默认状态。
这与命名全局单元格并在以后的公式中引用它没有什么不同,后者不需要VBA。我假设你的功能在幕后有点复杂,这需要一个UDF。如果没有,只需使用命名范围。
我实际上建议你使用1或2而不是“A”或“B”,因为当你需要引用全局设置时你可以使用CHOOSE函数,它具有比使用IF更简单的语法功能