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

时间:2017-05-16 19:56:40

标签: excel vba excel-vba

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

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

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

3 个答案:

答案 0 :(得分:3)

如果您需要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。 您甚至可以使用单元格引用并在运行代码之前更新单元格。

结果

  

堆栈

     

溢出

答案 1 :(得分:1)

最简单的解决方法是使用通用功能替换所有Type var dt = new DataTable(); var dc = new DataColumn("Age", typeof(int)); dt.Columns.Add(dc); var dr = dt.NewRow(); dr["Age"] = "test"; // throws an ArgumentException //Input string was not in a correct format. Couldn't store<test> in Age Column. Expected type is Int32. 个来电,例如而不是

Left

Right

然后有一个功能

x = Left("abc", 2)

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

答案 2 :(得分:1)

您还可以使用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