ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > 我的酷贴 > Excel VBA > 定长字符串与变长字符串。

定长字符串与变长字符串。

作者:绿色风 分类: 时间:2022-08-18 浏览:77
楼主
omnw
  VBA中字符串有两种:变长与定长的字符串。变长字符串最多可包含大约 20 亿 ( 2^31)个字符。定长字符串可包含 1 到大约 64K ( 2^16 ) 个字符。那么如何理解变长与定长字符串的区别呢?
  先来看一段代码:
  1.   s = "A"
  2.   Debug.Print Len(s) = 1
  3.   Debug.Print s = "A"

  你是否认为上面的输出必然是两个TRUE,答案自然是否定的。选择从这儿开始,只是为了加深你的印象。
  在VBA中,一种是变长的字符串,这是我们常用的,声明的方法可以是下面的写法之一:
  Dim s As String
  Dim s$
  另外一种叫定长字符串,声明的方法如下:
  Dim s As String * 2
  上面声明了一个长度为2的字符串。
  对变长的字符串,在声明后,VBA将自动将其初始化为0长度的空字符串。
  Dim s$
  s=""
  上面两行代码的第二句是写程序的一个好习惯,但却是没有必要的。
  变长字符串占用的内存空间由系统动态分配。
  来看看定长字符串。
  声明定长字符串后,系统将为它分配一个声明长度的字符串,并且在运行期间这个长度不可改变。在被初始化前,定长字符串的各字符用ASCII码为0的字符填充。
  1. Sub aTest()
  2.     Dim i%, s As String * 2
  3.     For i = 1 To Len(s)
  4.         Debug.Print Asc(Mid(s, i, 1))
  5.     Next i
  6. End Sub

  上面这段代码会在调试窗口输出两个0。
  但定长字符串一旦被初始化或被重新赋值,则按这样的规则处理:超过长度的部分将被舍弃,不足的尾部用空格填充(后面会提到,API例外)。
  我们在上段代码中加一句s=""看看:
  1. Sub aTest()
  2.     Dim i%, s As String * 2
  3.     s = ""
  4.     For i = 1 To Len(s)
  5.         Debug.Print Asc(Mid(s, i, 1))
  6.     Next i
  7. End Sub

  将会输出两个32(32是空格的ASCII码)。
  同样的,把s=""换成s="ABCD",将会输出65和66,超过长度的“CD”将被舍弃,有兴趣自己试试吧。
  
  
2楼
laoyebin
到现在都没用过定长,呵呵,恶补一下知识

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap