我希望能够使用字符串变量调用诸如left()和right()之类的应用程序函数。
原因是我当前的代码工作正常,但有多个left()和right()实例,每次运行时都需要更改。我希望每次只能改变一次(“全球”)。
点击后,我尝试了 CallByName 和 Application.Run 。它们似乎只适用于自定义类/宏。这是真的?还有什么我应该研究的吗?我不需要特定的代码,谢谢!
答案 0 :(得分:3)
如果您需要Left
或Right
,则可以构建自定义函数。
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