学习Excel技术,关注微信公众号:
excelperfect
在C语言中,经典的函数printf用来格式化输出内容,在格式字符串中包含了要原样输出的字符和占位符,占位符一般由%和指定转换格式组成,例如:
printf(“i = %d, j = %d”, 1, 2)
输出:
i = 1, j = 2
在Python中,可以使用“{}”来占位,并在右侧指定相应的值,例如:
>>> “{0}, {1} 和 {2}”.format(“一”, “二”, “三”)
输出:
一, 二和三
在VBA中,我通常使用debug.print在VBE中输出结果,或者使用MsgBox函数来显示信息。其实,使用VBA自定义函数,也可以模拟类似C语言的占位输出。
假设自定义函数为ImitatePrint,我输入:
ImitatePrint("我的%1是%2", "微信公众号", "完美Excel")
则会输出:
我的微信公众号是完美Excel
其中,%1和%2是占位符,分别代表要在此处输入的数据。当然,也可以将它们调换,例如:
ImitatePrint("我的%2是%1", "微信公众号", "完美Excel")
则会输出:
我的完美Excel是微信公众号
自定义函数ImitatePrint的代码如下:
'代码来源自《VBA高级开发指南》
Public Function ImitatePrint( _
ByVal strIn As String, _
ParamArray varItems() As Variant) _
As String
'错误处理
On Error GoTo Handleerr
'声明变量
Dim intPos As Integer
Dim strReplace As String
Dim intI As Integer
'循环用户输入的数据
For intI = LBound(varItems) ToUBound(varItems)
'依次循环占位符位置
strReplace = "%" & (intI 1)
intPos = InStr(1, strIn, strReplace)
'如果找到,则使用相对应的值替换
If intPos > 0 Then
strIn = Left$(strIn, intPos - 1)& _
varItems(intI) & Mid$(strIn,intPos _
Len(strReplace))
End If
Next intI
'返回结果
ExitHere:
ImitatePrint = strIn
Exit Function
'发生错误则给出提示
Handleerr:
Select Case Err.Number
Case Else
MsgBox "错误:" & Err.Description & _
" (" & Err.Number& ")"
End Select
Resume ExitHere
End Function
代码中,使用ParamArray指定用户可以输入多个数据。在使用该函数时,输入的替换数据应与占位符的数量一致。
使用下面的示例代码测试:
Sub test()
Debug.Print ImitatePrint("我的%1是%2", "微信公众号", "完美Excel")
End Sub
下图1是测试示例结果:
图1
下面是自定义函数ImitatePrint代码的图片版: