相关疑难解决方法(0)

如何确定是否在VB6中初始化了一个数组?

将未扩展的数组传递给VB6的Ubound函数将导致错误,因此我想在检查其上限之前检查它是否已被标注尺寸.我该怎么做呢?

arrays vb6

52
推荐指数
6
解决办法
5万
查看次数

如何在数组中搜索字符串

是否有一个简单的(单行)在VBA中搜索数组中的字符串?或者我是否需要遍历每个元素并将其与目标字符串进行比较?

编辑:这是一维数组.我只需要知道如果字符串在数组中的某个位置.

IE:

names(JOHN, BOB, JAMES, PHLLIP)
Run Code Online (Sandbox Code Playgroud)

我怎么知道阵列中是否有"JOHN",它需要是最小的,因为它将重复约5000次,我不希望该功能减慢整个过程.

arrays vba

38
推荐指数
6
解决办法
16万
查看次数

VBScript中的零长度数组

我必须做一些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)

arrays vbscript

12
推荐指数
2
解决办法
4万
查看次数

VBA数组长度(不是ubound或onerror!)

很抱歉问这样一个基本问题,但这让我很生气......

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似乎真的很模糊!

ms-access vba

8
推荐指数
1
解决办法
4万
查看次数

VBA处理空数组错误

我正在编写一个脚本,它将循环遍历我的电子表格,并查找是否有任何重复的所选单元格.如果有重复,那么该函数将返回一个行是重复的数组,并创建一个注释告诉我哪些行是重复的.我已经能够处理错误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)

error-handling excel vba excel-2003

7
推荐指数
2
解决办法
3万
查看次数

使ScriptControl与Excel 2010 x64一起使用

我尝试使用给予解决这个,但是,每当我尝试运行最基础的东西,我得到一个Object not Defined错误.我认为这将是我的错(没有安装ScriptControl).但是,我尝试按此处所述进行安装,但无济于事.

我正在使用Office 2010 64位运行Windows 7 Professional x64.

com vba excel-vba scriptcontrol excel-2010

7
推荐指数
2
解决办法
2万
查看次数

如何在VBA中清空数组?

我正在开发一个与 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. …

arrays vba

5
推荐指数
1
解决办法
1万
查看次数

vba - 检查空数组

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设置为等于字节数组.那是"".这意味着数组是空的,对吗?)

vba

4
推荐指数
2
解决办法
4万
查看次数

VBA中如何判断数组是否为空?

我有一个函数,它检查数组是否为空。从今天起我收到运行时错误 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)

如何检查数组是否为空?

arrays excel vba

2
推荐指数
1
解决办法
1万
查看次数