You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何解决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

关键修改点说明

  1. 修复函数调用:把错误的Z = myfunction(vector)改成Z = vector(rng),给vector函数传递了它必须的Range参数(也就是你定义的A1:C3范围)。
  2. 初始化变量n:通过n = UBound(Z)获取vector返回的一维数组的长度,确保循环有有效的终止条件。
  3. (可选)添加了数组输出代码,方便你直接在工作表里看到打乱后的结果。

这样运行代码就不会再弹出“参数不可选”的错误,数组打乱的逻辑也能正常执行了。

内容的提问来源于stack exchange,提问作者rohan

火山引擎 最新活动