退出“While”循环后,我的VBA代码意外中止。 为什么?

我是VBA编码的新手。 我已经在Javascript和C ++中做了一些编码,所以我理解了这些概念。 不过,我并不太熟悉VBA的细节。 这个特定的代码是Excel 2007的。sortingfunction是从别处复制伪代码(文档不是我的)。 我已经将其重写为VBA(失败)。

此代码无法正常工作。 代码完全中止(不仅仅是跳出一个循环或者函数,而是两次通过While循环后完全退出。

若要复制该问题,请将此代码保存为Excel工作表的macros,在B5中键入数字9853,并在B6中键入“= Kaprekar(B5)”。 基本上,运行Kaprekar(9853)。

有人能帮我弄清楚我在这里做错了吗? 谢谢。

顺便说一下,我现在正在使用While-Wend。 我也尝试了While While循环与相同的结果。

代码如下:

Function Sort(A) limit = UBound(A) For i = 1 To limit ' A[ i ] is added in the sorted sequence A[0, .. i-1] ' save A[i] to make a hole at index iHole Item = A(i) iHole = i ' keep moving the hole to next smaller index until A[iHole - 1] is <= item While ((iHole > 0) And (A(iHole - 1) > Item)) ' move hole to next smaller index A(iHole) = A(iHole - 1) iHole = iHole - 1 Wend ' put item in the hole A(iHole) = Item Next i Sort = A End Function Function Kaprekar%(Original%) Dim Ord(0 To 3) As Integer Ord(0) = Original \ 1000 Ord(1) = (Original - (Ord(0) * 1000)) \ 100 Ord(2) = (Original - (Ord(1) * 100) - (Ord(0) * 1000)) \ 10 Ord(3) = (Original - (Ord(2) * 10) - (Ord(1) * 100) - (Ord(0) * 1000)) If (Ord(0) = Ord(1)) * (Ord(1) = Ord(2)) * (Ord(2) = Ord(3)) * (Ord(3) = Ord(0)) = 1 Then Kaprekar = -1 Exit Function End If Arr = Sort(Ord) Kaprekar = Ord(3) End Function 

excel评估while语句中的两个项目,所以

 While ((ihole > 0) And (A(ihole - 1) > item)) 

当ihole = 0时,第一次testing返回false,第二次testing超出范围,出现#Value错误。

一个快速的泡沫会是这样的:

 Option Explicit Function Sort(A) Dim iLoop As Long Dim jLoop As Long Dim Last As Long Dim Temp Last = UBound(A) For iLoop = 0 To Last - 1 For jLoop = iLoop + 1 To Last If A(iLoop) > A(jLoop) Then Temp = A(jLoop) A(jLoop) = A(iLoop) A(iLoop) = Temp End If Next jLoop Next iLoop Sort = A End Function