ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 2481|回复: 19

vba中判断〇维数组的简便方法

[复制链接]

TA的精华主题

TA的得分主题

发表于 2014-10-14 11:27 | 显示全部楼层 |阅读模式
本帖最后由 coby001 于 2014-10-14 11:42 编辑

在vba中使用 动态数组 方便又灵活。
但有时候要判断一下数组是否初始化,没初始化的动态数组是 0维 的。

一般的方法有
1、API 的 SafeArrayGetDim 方法
2、用 UBound()  试错。

如果只是判断数组是否是 0维 的,比较简便的方法是:
((Not Arr) = -1)

示例:
  1. Sub 零维数组()
  2.     Dim iArr0&(), iArr2&(2)

  3.     Debug.Print Not iArr0    '零维数组 显示 -1
  4.     Debug.Print Not iArr2    '显示 其他值
  5.    
  6.     Debug.Print IsZeroDim(iArr0)    '零维数组 显示 True
  7.     Debug.Print IsZeroDim(iArr2)     '显示 False

  8.     ReDim iArr0&(5)
  9.     Debug.Print Not iArr0    '不再是零维数组 显示 其他值

  10. End Sub

  11. Function IsZeroDim(iArr&()) As Boolean
  12.     IsZeroDim = ((Not iArr) = -1)
  13. End Function
复制代码

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-14 11:36 | 显示全部楼层
由于vba是强类型语言,要分别针对其他类型些特定函数,
示例中只写了个 long型数组的函数。
Function IsZeroDim(iArr&()) As Boolean

TA的精华主题

TA的得分主题

发表于 2014-10-14 12:33 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-14 14:06 | 显示全部楼层
bluexuemei 发表于 2014-10-14 12:33
Not iArr0=-1,去掉前面的Not程序运行出错,这是为什么?

iArr0是数组名,不能赋值

TA的精华主题

TA的得分主题

发表于 2014-10-14 14:51 | 显示全部楼层
这个虽然很有趣,但其实在VBA中应该没有使用价值。

数组变量在写代码时就已经定义好了,没有任何需要在中途进行是否空数组的判断。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-14 15:21 | 显示全部楼层
香川群子 发表于 2014-10-14 14:51
这个虽然很有趣,但其实在VBA中应该没有使用价值。

数组变量在写代码时就已经定义好了,没有任何需要在中 ...

你多写点程序就知道了。

如果都定义好了,就没必要出现 动态数组 这玩意了~

点评

多写一行代码的事,If 条件 Then ReDim 函数名(-1 To -1): Exit Function  发表于 2014-10-14 15:29

TA的精华主题

TA的得分主题

发表于 2014-10-14 15:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
coby001 发表于 2014-10-14 15:21
你多写点程序就知道了。

如果都定义好了,就没必要出现 动态数组 这玩意了~

动态数组? Redim arr() 是不成立的。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-14 15:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
香川群子 发表于 2014-10-14 15:30
动态数组? Redim arr() 是不成立的。

。。。莫。名。其。妙。。。。。。。。。。。。。。。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2014-10-14 15:47 | 显示全部楼层
lee1892  多写一行代码的事,If 条件 Then ReDim 函数名(-1 To -1): Exit Function


多写这行代码干什么呀?

点评

你在干什么?  发表于 2014-10-14 16:04

TA的精华主题

TA的得分主题

发表于 2014-10-14 15:58 | 显示全部楼层
coby001 发表于 2014-10-14 15:21
你多写点程序就知道了。

如果都定义好了,就没必要出现 动态数组 这玩意了~

【你多写点程序就知道了。】

如果我说世界上并没有黑天鹅,你回答说:你多抓一些天鹅来看就能看到了……

还不如你直接上一段代码,让我看一看,你是如何有必要使用这个语句来【判断数组变量是否为空数组】的。


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

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-14 04:08 , Processed in 0.048230 second(s), 16 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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