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