设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[模块/函数] 【Access小品】情侣函数--自定义函数编制讲座三

[复制链接]
跳转到指定楼层
1#
发表于 2011-5-20 15:51:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 todaynew 于 2011-5-20 15:51 编辑

  版友煮茶论道同志提出一个文本框内换行的问题,这个问题本身很简单,我想以此问题为例,讲解如何编写情侣函数的问题。

  所谓情侣者,成双入对者也。也就是说,有些特定的算法,是可以找到其逆运算的。将特定的运算与其逆运算分别编写函数,就形成了一对如同情侣的函数。不要以为运算与逆运算的代码结构一定类似,很多情况下它们之间会有很大差异。

  回到问题上来,所谓文本框内的换行,实际就是字符串中插入回车换行符。一般来说文本框的长度是确定的,这个长度下一行能够容纳的字符数事先可以知道,所以要解决的问题只是在指定长度上向字符串插入回车换行符。于是这个函数我们可以称之为【字符串定长换行函数】,并可写为:

Function str(str0 As String, m As Long) As String
'功能:字符串定长换行
'参数:str0---字符串;m---单行字符数
'示例:me.备注.value=str(me.备注.value)
Dim i As Long
Dim n As Long
Dim s As String
n = Int(Len(str0) / m)
s = ""
For i = 0 To n - 1
    s = s & Mid(str0, i * m + 1, m) & Chr(13) & Chr(10)
Next
If Len(str0) > Len(Mid(str0, 1, n * m)) Then
    s = s & Mid(str0, n * m + 1)
Else
    s = Left(s, Len(s) - 2)
End If
str = s
End Function

  那么,对于【字符串定长换行函数】的逆函数是什么呢?简单!就是将字符串中的所有回车换行符删除掉。于是逆函数很简单,可以写成如下:

Function str1(str0 As String) As String
'功能:字符串取消换行
'参数:str0---字符串;m---单行字符数
'示例:me.备注.value=str1(me.备注.value)
str1 = Replace(Replace(str0, Chr(13), ""), Chr(10), "")
End Function

  有了这一对情侣函数,我们可以在两种不同情形下加以运用。第一种情形,就是煮茶论道同志所需要的报表文本框内换行的情况,我在实例中用手动换行进行了模拟,此一情形下只需用到【字符串定长换行函数】。另外一种情形,就是我们希望在文本框的输入过程中实现自动换行,此种情形也在实例中进行了模拟,该情形下需要同时用到【字符串定长换行函数】及其逆函数。
  






本帖子中包含更多资源

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

x

本帖被以下淘专辑推荐:

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖1 订阅订阅
2#
发表于 2011-5-20 20:19:46 | 只看该作者
值得学习
3#
 楼主| 发表于 2011-5-20 22:07:55 | 只看该作者
aslxt 发表于 2011-5-20 20:19
值得学习

谢谢aslxt同志捧场,不知道是不是这个实例写的不好,好像感兴趣的同志不多,呵呵。

点击这里给我发消息

4#
发表于 2011-5-21 09:57:17 | 只看该作者
收藏了!
5#
发表于 2011-5-21 15:01:03 | 只看该作者
我学习下!
6#
 楼主| 发表于 2011-5-21 15:45:35 | 只看该作者
zmt 发表于 2011-5-21 15:32
学习了!有一问题请教版主:str(str0 As String, m As Long) As String,是先将"str0"及"M"分别设为字符串变量 ...

设为什么类型不是关键,呵呵。
可理解为输入两个参数,输出一个结果。指定输入参数的类型和指定输出结果的类型无先后秩序,只是自定义函数规定的写法是如此而已。
7#
发表于 2011-5-24 10:37:16 | 只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 06:22 , Processed in 0.107898 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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