Excel VBA – 按名称调用应用程序function(左,右)

我希望能够使用stringvariables来调用诸如left()和right()之类的应用程序函数。

原因是我目前的代码工作正常,但有多个实例left()和right(),可能需要改变我每次运行它。 我希望每次只能改变一次(“全局”)。

谷歌search后,我尝试了CallByNameApplication.Run 。 看来,他们只能使用自定义的类/macros。 这是真的? 还有什么我应该看看? 我不需要特定的代码,谢谢!

如果你想要LeftRight你可以build立一个自定义函数。

 Option Explicit Sub Test() Debug.Print LeftRight("L", "StackOverflow", 5) Debug.Print LeftRight("R", "StackOverflow", 8) End Sub Function LeftRight(sWhich As String, sValue As String, iLength As Integer) As String Select Case sWhich Case "L": LeftRight = Left(sValue, iLength) Case "R": LeftRight = Right(sValue, iLength) End Select End Function 

你只需要使用“L”或“R”。 改变一次,并每次传递。 您甚至可以使用单元格引用来更新单元格,然后再运行代码。

结果

溢出

最简单的方法是用一个generics函数replace所有的Left调用,例如

 x = Left("abc", 2) 

 x = LeftOrRight("abc", 2) 

然后有一个function

 Function LeftOrRight(str As Variant, len As Long) As Variant 'Uncomment this line for Left LeftOrRight = Left(str, len) 'Uncomment this line for Right LeftOrRight = Right(str, len) End Function 

然后,您可以根据需要更改一个function。

您也可以使用SWITCH来实现Scott的想法(如果string长度无效,则不会出现error handling):

 Sub Test() Debug.Print LeftRight("L", "StackOverflow", 5) Debug.Print LeftRight("R", "StackOverflow", 8) End Sub Function LeftRight(sWhich As String, sValue As String, iLength As Integer) As String LeftRight = Switch(sWhich = "L", Left$(sValue, iLength), sWhich = "R", Right$(sValue, iLength)) End Function