Excel VBA – 用sumproduct VBA脚本的问题

我目前正在构build一个工具,以便从SAP提取摘要并将其放入财务pipe理工具(或金融工具)中。 该工具成功从SAP CJ74报告中提取实际数据,并对数据进行规范化处理。

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

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

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

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作为string是“5:54”,这是你是什么期待?

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

您以string的forms在VBA中分配公式。 所以这个代码例如:

 .Cells(Copyrange).Formula = "=SUMPRODUCT((CapexPersonName" = "CapexPersonLookup)*(CapexActualsDate" = "CapexActualsCell),(CapexSumRange)" 

将会出错,因为它就像是一个在VBA中也不被接受的多重布尔expression式(例如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