ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: babawu

[求助] 怎样判断数组为空值?

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-7 08:58 | 显示全部楼层
我要使用的地方是函数的返回值的时候,既要返回一个空数组,
通过前面朋友的讲解,判断已经学习了,
就是通过自定义判断函数来解决。

那么,通过redim能把数组赋空吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2009-3-7 09:12 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
是不是这样来实现?

dim a() as integer
redim a(1)'这里已经已经不为空
...
dim b() as integer
a=b'这里把a赋空

以上思路对不对?

TA的精华主题

TA的得分主题

发表于 2011-10-13 13:30 | 显示全部楼层
如果,数组下标是默认的0的话,上面的代码会存在一个问题,如下:
Sub y3231057()
Dim a() As Integer
On Error Resume Next
ReDim arr(0 To 0)
arr(0) = 1
If UBound(a()) < 1 Then
    MsgBox "数组为空"
End If
End Sub
运行结果为 数组为空,所以进行IF判断时候的数组下标的值,得根据实际情况进行选择!

TA的精华主题

TA的得分主题

发表于 2016-6-21 10:16 | 显示全部楼层
8楼少了下面一句API,把这一句放在模块的上边,就可以用函数判断了
Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long

TA的精华主题

TA的得分主题

发表于 2016-11-18 10:07 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
针对我们这些对VBA知其然不知其所以然的初级人士来说,什么API之类确实够复杂,虽然有别人的东西可用,但总觉得不爽。
其实工作实例中我也遇到过类似的情况,但我所知道的是用自己明白VBA代码去堂而皇之的判断并解决问题,以下提供2种思路供参考:

第一种:通过错误进跳行执行代码。
意思就是说,之所以要判断数组是否为空,则说明你的数组是一个动态并临时存放数据的数组,现在面临一个将其扩展前要引用其上下标,如果数组为空,则引用代码会报错。此时可以利用下面的成对代码来包住引用上下标的代码:
On Error Go To +行标签
  ……对上下标引用的语句
On Error Go To 0 ‘零而非字母噢
行标签则是你当数组为空时需要跳转到初始赋值的地方。

第二种:不要围绕数组为空来纠结,通过另一个循环变量来转移问题
一般来说,动态数组的运用多用在循环语句中,那么在循环的一开始就定义一个变量,每循环一次这个变量就叠加1,那么下面的代码就可以分两条线执行。
if 变量=0 then
  初始赋值
else
  则正常引用上下标,然后再用redim preserve 数组来进行动态扩充
endif

个人拙见!希望能帮您解决问题。

TA的精华主题

TA的得分主题

发表于 2016-11-18 11:38 | 显示全部楼层
追回第三种方法:

将动态数组初始声明成这样:
dim Arr(1 to 1) 或者 dim Arr(1 to 1, 1 to 1)
再在程序执行代码中判断数组元素是否为空
if Arr(1) = ""  
   初始赋值
else
   追加赋值
endif

TA的精华主题

TA的得分主题

发表于 2016-11-18 12:17 | 显示全部楼层
来虚的没用,上个实例代码图片(并非为了防拷)吧,之所以不直接引用代码,是我之前每次粘入代码,排版就乱了,特别是批注乱跳行,不知道为什么。对于新手很难看懂,截图是我们对仗工整的格式,方便新人看懂。
QQ截图20161118121423.jpg

TA的精华主题

TA的得分主题

发表于 2017-2-10 11:30 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
sub test1()
  dim arr1()
  if len(join(arr1))=0 then
     msgbox "arr1 is Null!"
  end if
end sub

评分

1

查看全部评分

TA的精华主题

TA的得分主题

发表于 2020-5-20 18:21 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2022-1-6 15:08 | 显示全部楼层
antique_star 发表于 2016-11-18 10:07
针对我们这些对VBA知其然不知其所以然的初级人士来说,什么API之类确实够复杂,虽然有别人的东西可用,但总 ...

优秀!!!可以加个联系方式学习下吗?
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-11-18 12:16 , Processed in 0.046417 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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