Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 带有application.worksheetfunction的数组上出现不匹配错误_Vba_Excel - Fatal编程技术网

Vba 带有application.worksheetfunction的数组上出现不匹配错误

Vba 带有application.worksheetfunction的数组上出现不匹配错误,vba,excel,Vba,Excel,目前,我正在尝试采用一个复杂的excel公式,并将其转换为应用程序.worksheetfunctionVBA进程,以便在代码执行期间对其进行评估 我之前已经问过这个问题,但仍然很难得出我需要修改的地方/内容,以使其得到适当的执行 基本上,我采用下面的excel公式,并努力将其转换为具有动态单元格范围的VBA代码(另外,$AM41是动态的,将根据代码定义进行更改) 到目前为止,我的代码是这样的 Dim mws As Worksheet Dim wf As WorksheetFunc

目前,我正在尝试采用一个复杂的excel公式,并将其转换为
应用程序.worksheetfunction
VBA进程,以便在代码执行期间对其进行评估

我之前已经问过这个问题,但仍然很难得出我需要修改的地方/内容,以使其得到适当的执行

基本上,我采用下面的excel公式,并努力将其转换为具有动态单元格范围的VBA代码(另外,
$AM41
是动态的,将根据代码定义进行更改)

到目前为止,我的代码是这样的

    Dim mws As Worksheet
    Dim wf As WorksheetFunction
    Dim mwsN As Range
    Dim mwsC As Range
    Dim mwsB As Range
    Dim mwsLast As Range

    Set wf = Application.WorksheetFunction
    Set mws = Sheets("Marks")
    Set mwsN = mws.Range("N:N")
    Set mwsC = mws.Range("C:C")
    Set mwsB = mws.Range("B:B")
    LastMWSR = mws.Cells(mws.Rows.Count, "B").End(xlUp).Row
    ClastMWSC = mws.Cells(1, mws.Columns.Count).End(xlToLeft).Column
    Set mwsLast = mws.Cells(LastMWSR + 1, ClastMWSC - 1)


    'error, is thrown just below this line

    mws.Cells(LastMWSR + 1, ClastMWSC).Value = _
    wf.SumIfs(mwsN, mwsB, wf.Index(mwsB, wf.Max(wf.Index((mwsC = mwsLast) * wf.Row(mwsC), 0))), mwsC, mwsLast)
我相信错配错误就在这里抛出

wf.Max(wf.Index((mwsC = mwsLast)
我不知道如何将该数组转换为VBA术语


有谁能帮助您说明如何使此动态化并清除不匹配错误吗?

您需要重新思考整个方法。没有
工作表函数。行
,无法使用
=
将多单元格范围(或数组)与值进行比较。您可以使用
Evaluate
并传递公式字符串,或者只将公式放入单元格中,然后转换为值。但您可以使用动态范围的Evaluate吗?我很乐意输入一个公式,然后将其粘贴为值,但我需要$AM41来保持动态。可以这样做吗?它只是一个字符串,因此您可以根据需要调整行号concatenation@Rory-如果我可以在工作表上使用
=行(1:1)
=匹配(“abc”,行(1:1),0)
,那么为什么没有
工作表功能。行
?@Jeeped您不需要为单个行号使用一个(因为
范围
有一个
属性),需要一个行号数组有点深奥。
wf.Max(wf.Index((mwsC = mwsLast)