Excel VBA-sumproduct VBA脚本的问题

Excel VBA-sumproduct VBA脚本的问题,vba,excel,Vba,Excel,我目前正在构建一个工具,以便从SAP中提取精华并将其放入财务管理工具(或财务工具)中。该工具成功地从SAP CJ74报告中提取实际数据,并对数据进行规范化 我需要将sumproduct函数放入电子表格中,以使用名称和日期作为产品匹配项,将数据源中的数据提取到电子表格中。一张用于资本支出,另一张用于运营支出。这两张纸是彼此的复制品 我试图编写一些代码来执行下面的要求,但在执行代码时,我遇到了应用程序定义或对象定义的错误。我可以得到一些帮助,或者是更好的方法,或者是纠正下面的错误 注意:运行此代码的

我目前正在构建一个工具,以便从SAP中提取精华并将其放入财务管理工具(或财务工具)中。该工具成功地从SAP CJ74报告中提取实际数据,并对数据进行规范化

我需要将sumproduct函数放入电子表格中,以使用名称和日期作为产品匹配项,将数据源中的数据提取到电子表格中。一张用于资本支出,另一张用于运营支出。这两张纸是彼此的复制品

我试图编写一些代码来执行下面的要求,但在执行代码时,我遇到了应用程序定义或对象定义的错误。我可以得到一些帮助,或者是更好的方法,或者是纠正下面的错误

注意:运行此代码的工作表是“导出器工具”

Sub SumproductAlternative()

Dim Dim wb1 As Workbook, wb2 As Workbook, wb3 As Workbook
Dim Copyrange As Long, MaxRow As Long
Dim CapexPersonName As Range, CapexActualsDate As Range, CapexActualsCell As Range, 
Dim OpexPersonName As Range, OpexActualsDate As Range, OpexActualsCell As Range
Dim OpexActualsDate As Range, CapexActualsDate as Range
Dim CapexPersonLookup As Range, OpexPersonLookup As Range

Set wb1 = Workbooks.Open("Financial Tool.xlsm")
Set wb2 = Workbooks.Open("Finance Extract.xlsm")
Set wb3 = Workbooks.Open("Exporter Tool.xlsm")

wb3.Worksheets("Config Sheet").Activate
Set CapexPersonName = ThisWorkbook.Sheets("Config Sheet").Range("A5:A" &     LastRow)
Set CapexActualsDate = ThisWorkbook.Sheets("Config Sheet").Range("5:5" & LastColumn)
Set CapexSumRange = ThisWorkbook.Sheets("Capex Pivot").Range("A4").CurrentRegion
Set CapexPersonLookup = wb2.Sheets("Capex").Range("E2:E1300")
Set CapexActualsCell = wb2.Sheets("Capex").Range("5:5" & LastColumn)


Set OpexPersonName = ThisWorkbook.Sheets("Config Sheet").Range("A5:A" & LastRow)
Set OpexActualsDate = ThisWorkbook.Sheets("Config Sheet").Range("5:5" & LastColumn)
Set OpexSumRange = ThisWorkbook.Sheets("Capex Pivot").Range("A4").CurrentRegion
Set OpexPersonLookup = wb2.Sheets("Opex").Range("E2:E1300")
Set OpexActualsCell = wb2.Sheets("Opex").Range("c3:c" & LastRow)


wb1.Sheets("CAPEX").Select
With wb1.Sheets("Capex")
 MaxRow = .Range("H528").CurrentRegion.rows.Count
 For Copyrange = MaxRow To 528 Step -1
     If .Cells(Copyrange).Interior.ColorIndex = 40 Then
        .Cells(Copyrange).Formula = " = SUMPRODUCT((CapexPersonName" = "CapexPersonLookup)*(CapexActualsDate" = "CapexActualsCell),(CapexSumRange)"
     End If
 Next Copyrange
End With

MaxRow = 0
Copyrange = 0

wb1.Sheets("OPEX").Select
With wb1.Sheets("Opex")
 MaxRow = .Range("H528").CurrentRegion.rows.Count
 For Copyrange = MaxRow To 528 Step -1
     If .Cells(Copyrange).Interior.ColorIndex = 40 Then
        .Cells(Copyrange).Formula = " = SUMPRODUCT((OpexPersonName" = "OpexPersonLookup)*(OpexActualsDate" = "OpexActualsCell),(OpexSumRange)"
     End If
 Next Copyrange
End With
这一点与我有关:

Range("5:5" & LastColumn)
例如,如果您将4作为最后一列,那么该范围将是第5-54行所有列,因为您要求将“5:5”和4作为一个字符串,即“5:54”,这是您所期望的吗


另外,LastRow和LastColumn是在哪里定义的?

您可以在VBA中以字符串的形式分配公式。例如,这段代码:

.Cells(Copyrange).Formula = "=SUMPRODUCT((CapexPersonName" = "CapexPersonLookup)*(CapexActualsDate" = "CapexActualsCell),(CapexSumRange)"
将出错,因为它类似于VBA中也不接受的多重布尔表达式(例如x=y=z)

要执行所需操作,请尝试以下操作:

Dim myformula As String
myformula = "=SUMPRODUCT((" & CapexPersonName.Address(, , , True) & "=" & _
    CapexPersonLookup.Address(, , , True) & ")*(" & _
    CapexActualsDate.Address(, , , True) & "=" & _
    CapexActualsCell.Address(, , , True) & _
    ")," & CapexSumRange.Address(, , , True) & ")"
.Cells(Copyrange).Formula = myformula

本部分搜索第5:5行中的日期匹配项,因为第5:5行包含按月份排序的列。我需要代码来搜索整行中的月份匹配项,直到选项用尽为止。这就是ideaOK,所以假设它从A列开始,它将是范围(“A5:&单元格(,5).offset(4,0).address)”,4 offset是你在开始时在-1旁边使用的相同数字,你必须解决范围语法的问题,正如Dan在他的文章中指出的那样。一旦正确设置了范围对象,就可以像我发布的那样指定公式。请注意,您的范围应具有相同的大小,以使其正常工作。