繁体   English   中英

Excel VBA - 按名称调用应用程序功能(左,右)

[英]Excel VBA - Call application function (left, right) by name

我希望能够使用字符串变量调用应用程序函数,如left()和right()。

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

谷歌搜索后,我尝试了CallByNameApplication.Run 它们似乎只适用于自定义类/宏。 这是真的? 还有什么我应该研究的吗? 我不需要特定的代码,谢谢!

如果您想要LeftRight您可以构建一个自定义函数。

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”。 改变它一次并且每次都传递给sWhich 您甚至可以使用单元格引用并在运行代码之前更新单元格。

结果

溢出

最简单的方法是用通用函数替换所有的LeftRight调用,例如代替

x = Left("abc", 2)

x = LeftOrRight("abc", 2)

然后有一个功能

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

然后您可以根据需要更改一个功能。

您也可以使用SWITCH来实现Scott的想法(如果字符串长度无效,则不进行错误处理):

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM