Excel实战技巧49: 模拟占位输出

2019-07-19 16:44:46 浏览数 (1)

学习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代码的图片版:

0 人点赞