将未扩展的数组传递给VB6的Ubound函数将导致错误,因此我想在检查其上限之前检查它是否已被标注尺寸.我该怎么做呢?
是否有一个简单的(单行)在VBA中搜索数组中的字符串?或者我是否需要遍历每个元素并将其与目标字符串进行比较?
编辑:这是一维数组.我只需要知道如果字符串在数组中的某个位置.
IE:
names(JOHN, BOB, JAMES, PHLLIP)
Run Code Online (Sandbox Code Playgroud)
我怎么知道阵列中是否有"JOHN",它需要是最小的,因为它将重复约5000次,我不希望该功能减慢整个过程.
我必须做一些ASP工作,我发现该语言没有提供检测零长度数组的方法(好吧,我想你可以检测到它们在你尝试使用它们时抛出的异常......).如果没有任何理智的方法来处理它,为什么Split()会返回一个空数组?或者我错过了什么?
我编造了以下hack以检测空数组,但必须有一种更简单的方法.这是什么?TIA
function ArrayEmpty (a)
dim i, res
res = true
for each i in a
res = false
exit for
next
ArrayEmpty = res
end function
Run Code Online (Sandbox Code Playgroud) 很抱歉问这样一个基本问题,但这让我很生气......
VBA中的哪个函数返回数组中的元素数...即当数组为空时它将返回0?
我不能用UBound做这个,因为它在一个空数组上调用时抛出一个错误,我不能相信通过使用OnError来首先确定它是否为空的方式来做到这一点......就像在论坛上建议的那样!array.Length抱怨一个糟糕的限定符或其他东西.
我真的需要这样做:
dim termAry() as String
populate termAry
...
private sub populate(terms() as String)
redim preserve terms(terms.Length) ' Redim takes ubound for array size
terms(ubound(terms)) = "something really annoying"
end sub
Run Code Online (Sandbox Code Playgroud)
PS任何良好的链接到一个简洁的VBA语言和函数参考将是最有用的... MSDN似乎真的很模糊!
我正在编写一个脚本,它将循环遍历我的电子表格,并查找是否有任何重复的所选单元格.如果有重复,那么该函数将返回一个行是重复的数组,并创建一个注释告诉我哪些行是重复的.我已经能够处理错误0但是现在当我使用UBound函数检查数组中是否存在元素时,我得到错误9.有没有人知道如何验证整数数组,如果它是空的或不是因为我的代码似乎没有完成这项工作.以下是我的代码
Function IsArrayEmpty(anArray As Variant) As Boolean
Dim i As Integer
On Error Resume Next
i = UBound(anArray, 1)
Select Case (Err.Number)
Case 0
IsArrayEmpty = True
Case 9
IsArrayEmpty = True
Case Else
IsArrayEmpty = False
End Select
End Function
Run Code Online (Sandbox Code Playgroud) 我正在开发一个与 COM 服务器交换对象的 Excel VBA 插件,如下所示:
'get an array of objects
Dim Ents() As ISomething
ComObject.GetEntities Ents
'send an array with 10 objects
ReDim Ents(9)
Set Ents(0) = ...
...
ComObject.SetEntities Ents
Run Code Online (Sandbox Code Playgroud)
获取数组效果很好:如果数组包含对象,它会按预期工作,如果数组为空,那么UBound(Ents) = -1一切都会按预期工作。
发送数组仅适用于非空数组,因为我不能Redim Ents(-1),并且EraseVBA 和 COM 服务器崩溃:Debug.Print UBound(Ents)在 VBA 中崩溃,谁知道是什么导致服务器崩溃。
看起来该Erase语句使数组未定义/损坏而不是空。
编辑(对下面评论的澄清):
执行此代码会崩溃,因为它无法计算UBound:
Sub Test()
Dim Ents() As ISmartId
Debug.Print UBound(Ents)
End Sub
Run Code Online (Sandbox Code Playgroud)
但是,如果添加Ents到监视窗口,然后在该行设置断点Debug.Print并执行,调试器会ISmartId(0 to -1)在“类型”列中显示 。此后,执行继续而不会崩溃,并且“调试”窗口显示预期的-1. …
Function IsVarArrayEmpty(anArray As Variant)
Dim i As Integer
On Error Resume Next
i = UBound(anArray, 1)
If Err.Number = 0 Then
IsVarArrayEmpty = False
Else
IsVarArrayEmpty = True
End If
End Function
Run Code Online (Sandbox Code Playgroud)
对于未初始化,它返回true,对于初始化,它返回false.我想看看它是否有任何数据/内容.但是,问题是我觉得即使数组中没有数据,上面的代码也会返回false.我该如何检查?
(我尝试将字符串s设置为等于字节数组.那是"".这意味着数组是空的,对吗?)
我有一个函数,它检查数组是否为空。从今天起我收到运行时错误 9。我不知道为什么。
这是代码:
When db table contains data, pass it to the variable => arrItems
arrItems as Variant
ArrEmpty as Boolean
With rs
If Not .EOF Then
arrItems = .GetRows
.Close
End If
End With
ArrEmpty = IsArrayEmpty(arrItems)
Private Function IsArrayEmpty(parArray As Variant) As Boolean
IsArrayEmpty = IIf(UBound(parArray) > 0, False, True) //Here is invoked the runtime error 9
End Function
Run Code Online (Sandbox Code Playgroud)
如何检查数组是否为空?
vba ×7
arrays ×5
excel ×2
com ×1
excel-2003 ×1
excel-2010 ×1
excel-vba ×1
ms-access ×1
vb6 ×1
vbscript ×1