的Excel for Mac 2011中:UBound函数()不工作
我正在做Excel的一个现有的启用宏的电子表格功能的Mac 2011的Excel for Mac 2011中:UBound函数()不工作
我有一个函数(Source),搜索阵列的指定值:
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
它完全在Excel 2013,但是用Excel for Mac 2011中,我收到错误:
Runtime error '9': Subscript out of range
我除了把它弄坏了,发现UBound函数调用是什么导致错误。
我想尽可能少地改变可维护性。我该如何解决Mac版本的这个错误?
在此先感谢您的回复!
编辑: @Siddharth溃败的解决方案是发现,但因为我是一个循环内进行搜索的阵列,我不得不修改循环如下到每次迭代之间的阵列复位(如果任何人运行到同一个问题!):
' --- START Reset Array for OS X ---
Dim OS_X_Hack(99) As String
For intIndex = 0 To 99
OS_X_Hack(intIndex) = Original(intIndex)
Next
Erase Original()
ReDim Original(0 To 99) As String
For intIndex = 0 To 99
Original(intIndex) = OS_X_Hack(intIndex)
Next
Erase OS_X_Hack()
' --- END Reset Array for OS X ---
好的这是我的观察。如果您在程序中调用该函数一次,那么它将正常工作。例
Sub Sample()
Dim a As Variant
Dim s As String
Dim strTemp As String
s = "CC"
strTemp = "A,B,C,D"
a = Split(strTemp, ",")
Debug.Print IsInArray(s, a)
End Sub
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
但是,如果你在程序调用它两次,然后你会得到一个错误Runtime error '9': Subscript out of range
。也许这是一个Excel 2011错误?
Sub Sample()
Dim a As Variant
Dim s As String
Dim strTemp As String
s = "CC"
strTemp = "A,B,C,D"
a = Split(strTemp, ",")
Debug.Print IsInArray(s, a)
s = "A"
Debug.Print IsInArray(s, a)
End Sub
解
重新创建阵列。看到这个例子。
Sub Sample()
Dim a As Variant
Dim s As String
Dim strTemp As String
s = "CC"
strTemp = "A,B,C,D"
a = Split(strTemp, ",")
Debug.Print IsInArray(s, a)
s = "A"
a = Split(strTemp, ",")
Debug.Print IsInArray(s, a)
End Sub
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1)
End Function
太棒了;非常感谢!我搜索的数组是在一个循环中,所以我添加了一个重置它的方法(编辑成原始问题)。 – 2013-04-26 21:26:55
@CameronSumpter我认为你的问题可能是你的数组定义为一个字符串数组(“Dim a()As String”)而不是变体(“Dim a As Variant”)。当我改变为变体时,Siddharth的解决方案为我工作,即不使用Erase()和ReDim()。 – litturt 2015-09-11 17:44:07
信用这个解决方案去this answer by Brian Hinchey。使用下面的代码,我可以在Excel for Mac 2011中的循环内调用IsInArray。
Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean
IsInArray = Not IsError(Application.Match(stringToBeFound, arr, 0))
End Function
刚刚在Excel 2011中进行了测试。它对我来说绝对好。希望你传递一个数组到一个函数?你能告诉我你是如何调用这个功能的? – 2013-04-26 17:03:30