云计算、AI、云原生、大数据等一站式技术学习平台

网站首页 > 教程文章 正文

VBA字节数组函数StrPtr()(vba string数组)

jxf315 2025-06-12 13:39:53 教程文章 1 ℃

分享成果,随喜正能量】人有德,不仅是一个人的修养,更藏着一个人的福气。在这个世界,我们的内心逐渐在失去什么,那种原本柔软善良,利他互助、和真正彼此温暖的悲悯之心。。

《VBA经典应用69例》(10178981),是我推出的第九套教程,教程是专门针对初级、中级学员在学习VBA过程中可能遇到的案例展开,这套教程案例众多,紧贴“实战”,并做“战术总结”,以便大家能很好的应用。教程的目的是要求大家在实际工作中要利用好VBA。本套教程共三册六十九个专题,今日内容是教程的应用11内容:VBA字节数组函数StrPtr()

应用11 利用VBA判断数组是否为空

我们这个专题的内容是有关数组的知识,数组一直是VBA知识点中一个比较关键的所在。我们在学习过程中一定要了解什么是数组,数组在具体程序应用过程中的意义是什么?当相同数据类型的项的列表或集合存储在连续的内存位置时,我们称之为数组;数组是软件开发中广泛用于存储数据的有用对象。

4 字节数组的函数StrPtr()

我们这部分讲解一个字节数组函数StrPtr(),这个函数是我各套教程中首次讲解到的,希望大家能理解和掌握。

  • Byte变量:Byte变量存储为一个不带符号的 8 位(1 个字节)数字,值范围为 0-255。Byte数据类型可用于包含二进制数据。
  • 字节数组:这个数组只不过是一个序列或字符。字符串可以直接分配给字节数组。数组的两个元素用于为字符串中的字符分配空间。

StrPtr函数:该函数返回真正的UNICODE字符串缓冲区的地址。也就是字符串变量在内存的地址。

  • StrPtr函数主要用来产生高效的UNICODE API调用。在VB4,UNICODE形式的API函数的调用必须借助于Byte数组;
  • StrPtr还能用于优化ANSI API函数的调用。在调用时使用StrConv和StrPtr就能避免将一个字符串变量多次传递给函数以及为每个调用而执行转换操作所造成的系统负担;
  • StrPtr还是唯一能直观地告诉你空字符串和null字符串的不同的方法。对于null字符串(vbNullString),StrPtr的返回值为0,而对于空字符串,函数的返回值为非零。
  • StrPtr在 64 位版本上返回 LongPtr,在 32 位版本(4 字节)上返回 Long。

实例3 StrPtr函数的利用

这个实例中我们会看到字符串的内存地址,如下代码:

Sub mynzD()

'声明字节数组和字符串

Dim arr1() As Byte

Dim samplestr As String

'赋值字符串

samplestr = "Coffee"

'检查数组是否为空。strptr()如果数组为空,则返回0。

Application.SendKeys "^g"

Debug.Print StrPtr(arr1) = 0

'将字符串直接分配给字节数组

arr1() = samplestr

'查看数组中存储的内容

For i = LBound(arr1) To UBound(arr1)

Debug.Print arr1(i)

Next

'检查数组是否为空。strprtr()如果数组为空,则返回0。

Debug.Print StrPtr(arr1) = 0

End Sub

代码的截图:

代码的讲解:

1)字符串可以直接分配给字节数组。数组的两个元素用于为字符串中的字符分配空间。最初数组是空的,因此strptr(arr1)返回true。


2) For i = LBound(arr1) To UBound(arr1)

Debug.Print arr1(i)

Next

以上代码将输出数组每个元素的Ascii值,“Coffee”的代码如下:

“C”的Ascii值为67

Ascii空字符

“o”的Ascii值为111

Ascii空字符

“f”的Ascii值为102

Ascii空字符

“f”的Ascii值为102

Ascii空字符

“e”的Ascii值为101

Ascii空字符

“e”的Ascii值为101

Ascii空字符

最后,数组不是空的,因此strprtr(arr1)返回false。

最后我们看一下代码的输出结果:

结论:在VBA中,除了字节数组的strprtr()函数外,没有直接的方法来查找数组是否为空。然而,我们可以结合自己的逻辑来检查数组的是否为空,这里“空”的意思在于用户。它可以是依据合并数组元素字符串的长度,也可以依据数组是否占用内存。但本讲的意义在于要大家理解Join函数、Trim函数、Len函数、strprtr函数的应用。

今日内容回向:

1 如何理解Join函数、Trim函数、Len函数、strprtr函数的应用的意义?

2 如何理解数组为空?


本讲内容参考程序文件:应用011.xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:


分享成果,随喜正能量】物随心转,境由心造。人这一生,境遇如何,全由我们的心做主,智者,会把伤痛转化成快乐,把压力转化成动力,一路拼荆斩棘的成全自己,成就自己。。

最近发表
标签列表