Excel for Mac 2011:UBound()不起作用

我正在为Excel 2011 for Mac 2011制作现有的启用macros的电子表格function。

我有一个函数( 源 )search数组指定的值:

Function IsInArray(stringToBeFound As String, arr As Variant) As Boolean IsInArray = (UBound(Filter(arr, stringToBeFound)) > -1) End Function 

它适用于Excel 2013,但在Excel 2011 for Mac 2011中,我收到错误消息:

 Runtime error '9': Subscript out of range 

我把它弄坏了,发现UBound调用是导致错误的原因。

我想尽可能less地改变可维护性。 我怎样才能解决这个错误的Mac版本?

在此先感谢您的答复!

编辑: @Siddharth Rout的解决scheme是现货,但由于我在一个循环内search数组,我不得不修改循环重置每次迭代之间的数组如下(以防其他人遇到相同的问题!):

 ' --- 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 

在这里输入图像说明

重新创buildarrays。 看到这个例子。

 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 

在这里输入图像说明

这个解决scheme的信用由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