设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 3838|回复: 6
打印 上一主题 下一主题

[模块/函数] [原创]非常好用的Format函数

[复制链接]
跳转到指定楼层
1#
发表于 2008-7-6 17:43:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
也许你在其他开发语言中看到过,或者看到过类似的语句:Format("http://mail.qq.com/loginpage.asp?id={0}", 2364783),这个Format会返回什么样的结果呢?它返回的是:http://mail.qq.com/loginpage.asp?id=2364783。怎么样很有意思吧?但在VBA开发中我们想用却没有这样的函数,那怎么办?嘿嘿!还是我们自己动手丰衣足食。


Public Function ArrayFormat(expression As String, ParamArray formatException()) As String
   Dim strFind As String, strReplace As String, strTemp As String
   Dim i As Integer
   strTemp = expression
   For i = 0 To UBound(formatException)

        strFind = "{" & i & "}": strReplace = formatException(i)
        strTemp = Replace(strTemp, strFind, strReplace)
   Next
   ArrayFormat = strTemp
End Function





代码很短吧,只有10行。但它会带给我们一份不一样的感受。

我们先来个测试:


Sub Test()
Dim str As String
    str = "他们分别来自:{0}、{1}、{2}、{3}、{4}、{5}"
    Debug.Print ArrayFormat(str, "北京", "上海", "广州", "山东", "福建", "海南")
End Sub


执行上面的代码可在立即窗体中看到:他们分别来自:北京、上海、广州、山东、福建、海南。这相对于用 & 来串接字符串是否要方便些呢?


使用这个函数有以下注意事项:

1格式项的语法是{index}index 为从零开始的整数,指示对象列表中要格式化的元素。如果由 index
指定的对象是 空,则格式项将忽略。


2expression必须使用前导大括号字符和后缀大括号字符,即“{”和“}”。若要在expression中指定单个大括号字符,请指定两个前导大括号字符或后缀大括号字符(即“{{”或“}}”)。


3、当可选参数formatSting的最大下标(即:UBound(formatException))与格式项中index 的数值不相符时,不相符的部分都将被忽略。

例如:


Sub Test1()
Dim str As String
    str = "他们分别来自:{0}、{1}、{2}、{3}"
    Debug.Print  ArrayFormat(str, "北京", "上海", "广州", "山东", "福建", "海南")
End Sub



返回:他们分别来自:北京、上海、广州、山东


Sub Test2()
Dim str As String
    str = "他们分别来自:{0}、{1}、{2}、{3}、{4}、{5}"
    Debug.Print ArrayFormat(str, "北京", "上海", "广州")
End Sub


返回:他们分别来自:北京、上海、{2}{3}{4}{5}


所以在使用这个函数的时候要特别注意这点。

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享分享 分享淘帖1 订阅订阅
2#
 楼主| 发表于 2008-7-6 17:43:47 | 只看该作者
这个函数其实很有用途,比如我们经常使用的SQL语句设置参数的时候。当使用 &  经常字符串串接的时候,很容易出现错误。我们使用这个函数就变得异常简单了。

Sub Test2()
Dim str As String
    str = "SELECT * FROM [Table] WHERE ID ={0} AND Name ='{1}';"
    Debug.Print ArrayFormat(str, 25, "fans")
End Sub

返回:SELECT * FROM [Table] WHERE ID =25 AND Name ='fans';

看到了吧,这就是这个短短的函数的威力。

当我们配合正则表达式一起来定义这个函数的时候,它的威力就更强大了,可以实现很多复杂的功能。
3#
发表于 2008-7-6 20:02:55 | 只看该作者
很女子,很弓虽大,学习ing...... [:30]

点击这里给我发消息

4#
发表于 2008-7-7 09:46:38 | 只看该作者
提示: 作者被禁止或删除 内容自动屏蔽
5#
发表于 2008-7-7 10:22:31 | 只看该作者
的确很不错啊,我慢慢体会一下。
6#
发表于 2008-7-19 15:35:30 | 只看该作者
能否弄个库??????????[:30]
7#
 楼主| 发表于 2016-12-13 22:47:01 | 只看该作者
补充例子


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-4-21 00:27 , Processed in 0.104029 second(s), 33 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表