下面是一段代码,我需要通过传递消息来存储有关警告消息的一些信息。传递的参数本身是一个变体,它是由返回String
数组的SAPListOfMessages
的API调用设置的。然而,我注意到的是,只要有超过1个警告,列表就是2D的,messageList(x-1)
显然会导致错误,因为它不是一个正确的索引。同样奇怪的是,for each
循环似乎忽略了维度,只是以某种方式将数组展平并循环遍历,就像它是1D一样。我看到的解决这个问题的唯一方法是在做其他事情之前检查数组有多少维,因此我提出了这个问题。我没有找到任何关于获取维度数量的信息-我只找到了关于它们的边界的信息。在VBA中可以找到数组的维数吗?如果没有,你建议我如何解决这个问题?
Sub getOverlapWarnings(ByRef messageList As Variant, ByRef warnings As Dictionary)
Dim msg As Variant
Dim x As Integer
x = 1
'look for an overlap warning message in the list of messages
For Each msg In messageList
'look for the keyword 'overlap' in the list of messages
If InStr(1, msg, "overlap") <> 0 Then
warnings.Add messageList(x - 1), msg
End If
x = x + 1
Next msg
End Sub
发布于 2018-06-10 01:25:12
是否可以在VBA中找到数组的维数?
这种方法增加了可能的尺寸计数,60是内置的最大尺寸(c.f.评论):
Private Function nDim(ByVal vArray As Variant) As Long
' Purpose: get array dimension (MS)
Dim dimnum As Long
Dim ErrorCheck As Long ' OP: As Variant
On Error GoTo FinalDimension
For dimnum = 1 To 60 ' 60 being the absolute dimensions limitation
ErrorCheck = LBound(vArray, dimnum)
Next
' It's good use to formally exit a procedure before error handling
' (though theoretically this wouldn't needed in this special case - see comment)
Exit Function
FinalDimension:
nDim = dimnum - 1
End Function
更多链接(thx @ Further )
发布于 2018-06-10 01:27:09
数组有两个界限:上和下。
我想你是在问下限从哪里开始。
默认情况下,下限为零。例如:
Sub test()
Dim arr
arr = Array("a", "b", "c")
Debug.Print "Lower: " & LBound(arr), "Upper: " & UBound(arr)
End Sub
返回:Lower: 0 Upper: 2
,因为这3个元素的索引分别为0
、1
和2
。
默认情况下,一些功能可能是从1
开始的,但很少见。一个例子是用一个范围填充数组:
Sub test()
Dim arr
arr = Range("A2:A4")
Debug.Print "Lower: " & LBound(arr), "Upper: " & UBound(arr)
End Sub
...returns:Lower: 1 Upper: 3
如果您完全声明了数组,则可以根据需要设置上下限:
Sub test()
Dim arr(99 To 101) As String
arr(100) = "blah"
Debug.Print "Lower: " & LBound(arr), "Upper: " & UBound(arr)
End Sub
...returns:Lower: 99 Upper: 101
,但是声明了边界的数组不能与许多函数一起工作(就像前面的例子。
您还可以在每个模块的最顶部使用语句来设置默认的下限:
Option Base 1
...but有太多的地方它不能应用,它有点没用。(更多here。)
另请参阅:
Fixed& Dynamic)
(
https://stackoverflow.com/questions/50776690
复制相似问题