首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VB >

请教 vba中如何判断一个数组是否初始化

2012-02-16 
请问 vba中怎么判断一个数组是否初始化?如题。比如我定义一个数组,dim XXX as string我用了isnull,isempty

请问 vba中怎么判断一个数组是否初始化?
如题。
比如我定义一个数组,dim XXX as string
我用了isnull,isempty都不管用。ubound会报数组越界错误。
请问还有什么办法可以判断数组没有被初始化?
(可能有人会说用捕获异常的方法,我感觉那样不好)
谢谢各位..


[解决办法]
dim XXX as string 
怎么没有括号啊?
[解决办法]
整体判断很难,找不到这样的函数啊。用第一个元素判断可以的:

VB code
Option ExplicitDim XXX(99) As VariantPrivate Sub Form_Load()        'Dim i As Long        'For i = 0 To 99        '    XXX(i) = i        'Next                If IsEmpty(XXX(0)) Then           Debug.Print "没有初始化!"        Else           Debug.Print "已经初始化!"        End IfEnd Sub
[解决办法]
Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long 'API判断数组为空或没有初始化
 Private Sub Command1_Click()
Dim tmp() As String
If SafeArrayGetDim(tmp) = 0 Then
MsgBox "数组为空或没有初始化"
End If
End Sub
[解决办法]
引用楼主 coflich 的帖子:
如题。
比如我定义一个数组,dim XXX as string
我用了isnull,isempty都不管用。ubound会报数组越界错误。
请问还有什么办法可以判断数组没有被初始化?
(可能有人会说用捕获异常的方法,我感觉那样不好)
谢谢各位..

[解决办法]
这个题目怎么没有看到呢?
楼上正解.
[解决办法]
可以读空数组的下标,具体办法参见我博客里"一个VB数组指针类"那篇文章.
[解决办法]
晕,用ISARRAY判断是否是一个数组啊。
如果没初始化就不是一个数组,如果是的话返回TREE。
好像dim XXX as string 后,不能再初始化为一个数组了吧

[解决办法]
楼上说得不对,数组变量一旦声明,即使是空数组,IsArray返回值也为TRUE,因此,只能先定义一个SAFAARRAY结构,然后使用COPYMEMORY将数组变量复制到SAFEARRAY结构变量中,再读取结构变量中下标成员的值,如果为-1,则为空数组。具体代码懒得写了。
[解决办法]
探讨
Private Declare Function SafeArrayGetDim Lib "oleaut32.dll" (ByRef saArray() As Any) As Long 'API判断数组为空或没有初始化
Private Sub Command1_Click()
Dim tmp() As String
If SafeArrayGetDim(tmp) = 0 Then
MsgBox "数组为空或没有初始化"
End If
End Sub

热点排行