如何解决VBA调用vector函数时出现的‘参数不可选’错误
解决VBA中调用
vector函数时的“参数不可选”错误 先直接点出问题根源:
- 你调用
vector函数时没有传递它要求的参数:vector函数定义明确要求接收一个Range类型的参数(Function vector(rng As Range)),但你写的Z = myfunction(vector)里,既不存在myfunction这个函数,也没给vector传任何参数——这就是弹出错误的核心原因。 - 另外变量
n没有赋值,后面的For j = 1 To n循环会因为n是空值报错,得补上这个初始化步骤。
修正后的完整代码
Option Explicit Option Base 1 Sub JumbleArray() Dim n As Integer, rng As Range, Z As Variant, rn As Integer, tem As Integer, j As Integer Dim k As Integer Set rng = Range("A1:C3") ' 1. 修正:直接调用vector函数并传入已定义的rng参数 Z = vector(rng) ' 2. 给n赋值:获取返回数组的最大下标作为循环次数 n = UBound(Z) For j = 1 To n rn = WorksheetFunction.RandBetween(1, n - j + 1) tem = Z(n - j + 1) Z(n - j + 1) = Z(rn) Z(rn) = tem Next j ' 可选:把打乱后的数组输出到工作表,比如从E1开始 Range("E1").Resize(n, 1).Value = WorksheetFunction.Transpose(Z) End Sub Function vector(rng As Range) Dim nr As Integer, nc As Integer, i As Integer, j As Integer, temp() nr = rng.Rows.Count nc = rng.Columns.Count ReDim temp(nr * nc) For i = 1 To nr For j = 0 To nc - 1 temp((j * nr) + i) = rng.Cells(i, j + 1) Next j Next i temp = WorksheetFunction.Transpose(temp) vector = temp End Function
关键修改点说明
- 修复函数调用:把错误的
Z = myfunction(vector)改成Z = vector(rng),给vector函数传递了它必须的Range参数(也就是你定义的A1:C3范围)。 - 初始化变量n:通过
n = UBound(Z)获取vector返回的一维数组的长度,确保循环有有效的终止条件。 - (可选)添加了数组输出代码,方便你直接在工作表里看到打乱后的结果。
这样运行代码就不会再弹出“参数不可选”的错误,数组打乱的逻辑也能正常执行了。
内容的提问来源于stack exchange,提问作者rohan




