我是 VBA 编码的新手。我已经用 Javascript 和 C++ 进行了一些编码,所以我理解这些概念。不过,我对 VBA 的细节不太熟悉。此特定代码适用于 Excel 2007。排序功能是从其他地方作为伪代码复制的(文档不是我的)。我已将其重写为 VBA(未成功)。
此代码无法正常工作。代码突然完全中止(不仅仅是跳出循环或函数,而是在经过两次 While 循环后完全退出。
要重现该问题,请将此代码保存为 Excel 工作表的宏,在 B5 中键入数字 9853,在 B6 中键入“=Kaprekar(B5)”。本质上,运行 Kaprekar(9853)。
有人可以帮我弄清楚我在这里做错了什么吗?谢谢。
顺便说一句,我现在正在使用 While-Wend。我也尝试了 Do While-Loop,结果相同。
这是代码:
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