在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是測試示例結果: