gpt4 book ai didi

excel - vba 调用带有 'Call' 和不带的函数有什么区别? (数组排序功能 - 不同的结果)

转载 作者:行者123 更新时间:2023-12-01 10:23:23 26 4
gpt4 key购买 nike

这更像是一个“理解一个概念”的问题,而不是一个“修复代码问题”类型的问题......

我有一个包含字符串列表的数组,以及一个按字母顺序对这些字符串进行排序的函数(使用 BubbleSort 方法)。

如果我使用

Call AlphSortArray(arr)

或者
AlphSortArray arr

它完美地工作。但
AlphSortArray(arr)

留下未排序的项目,并砍掉列表中的第一个......

我一直在阅读,并且看到提到这可能与调用 byVal 与 byRef 有关,但无法找到明确的解释。

虽然代码工作正常,但如果有人能指出我正确的方向,这将是一个巨大的帮助,以便我理解以供将来引用!

提前谢谢了

上下文:我一直在设置一个包含组合框的 excel 用户表单,其中的源来自工作表上的名称列表(名称和名称的数量会根据用户输入不断变化)。该代码当前找到正确的单元格范围,将其放入数组中,按字母顺序对其进行排序,然后将其设置为源。

部分代码:

在主初始化用户表单代码中:
Call AlphSortArray(arrMRange)   'replace with lines above for error/no error
ComboBox1.List = arrMRange 'arrMRange is declared as Variant previously

然后是函数:
Dim x As Long, y As Long
Dim strTemp1 As String
For x = LBound(arr) To UBound(arr) - 1
For y = x + 1 To UBound(arr)
If UCase(arr(x)) > UCase(arr(y)) Then
strTemp1 = arr(x)
arr(x) = arr(y)
arr(y) = strTemp1
End If
Next y
Next x

(冒泡排序代码改编自评论: https://social.msdn.microsoft.com/Forums/en-US/830b42cf-8c97-4aaf-b34b-d860773281f7/sorting-an-array-in-vba-without-excel-function?forum=isvvba)

最佳答案

如果您正在处理 功能 ,然后避免使用 Call .这对我有用:

Sub MAIN2()
Dim ary(1 To 3) As String, bry
Dim i As Long

ary(1) = "zip"
ary(2) = "AAA"
ary(3) = "bbb"

bry = fSort(ary)

For i = 1 To 3
MsgBox bry(i)
Next i
End Sub

Public Function fSort(ByVal InOut) As Variant

Dim i As Long, J As Long, Low As Long
Dim Hi As Long, Temp As Variant

Low = LBound(InOut)
Hi = UBound(InOut)

J = (Hi - Low + 1) \ 2
Do While J > 0
For i = Low To Hi - J
If InOut(i) > InOut(i + J) Then
Temp = InOut(i)
InOut(i) = InOut(i + J)
InOut(i + J) = Temp
End If
Next i
For i = Hi - J To Low Step -1
If InOut(i) > InOut(i + J) Then
Temp = InOut(i)
InOut(i) = InOut(i + J)
InOut(i + J) = Temp
End If
Next i
J = J \ 2
Loop
fSort = InOut
End Function

注:

数组 ary()MAIN2()不是 由 UDF 更改。

关于excel - vba 调用带有 'Call' 和不带的函数有什么区别? (数组排序功能 - 不同的结果),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37969279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com