0

我有以下 VBA 代码:

        BD.Sheets("Sheet1").Range("F" & Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row).Formula = "=SUMIF('" & spath & "[" & itm & "]Sheet1'!$D$13:$D$" & LastRow2 & ",D" & BD.Sheets("Sheet1").Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row & ",OFFSET('" & spath & "[" & itm & "]Sheet1'!$D$13:$D$" & LastRow2 & ",0,MATCH(E" & BD.Sheets("Sheet1").Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row & ",'" & spath & "[" & itm & "]Sheet1'!$D$12:$R$12,0)-1))"
        With BD.Sheets("Sheet1")
            .Range("F" & .Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row).AutoFill Destination:=.Range("F" & .Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row & ":F" & .Cells(Rows.Count, 4).End(xlUp).Row)
        End With

(不要介意很长的 SUMIF 公式)

我正在使用以下代码循环文件:

spath = "P:\Actuary\Cash Flow Forecast\Annual and Quarterly Budget Data\"

''Retrieve the current files in directory
sfile = Dir(spath)
Do While sfile <> ""
    strFileNames = strFileNames & "," & sfile
    sfile = Dir()
Loop

''Open each file found
For Each itm In Split(strFileNames, ",")
    If itm <> "" Then
        Set wb = Workbooks.Open(spath & itm)

        ''DO LOTS OF CALCULATIONS (code above included)

    End If
Next itm

对于每个文件,假设我有以下列,我希望该公式执行的操作是放在第 6 列中的下一个可用单元格(根据我的代码,第 6 列是数量)并向下拖动直到最后一行列4(同样,根据我的代码,第 4 列是 RptLOB)

前任:

RptLOB       ECMAccount  Amount
Disability   GEP         20   ---> (=SUMIF formula for file 1)
MSL          GEP         ..
Contingency  GEP         ..   ---> drag down to here (end of file 1)
Disability   GEP         30   ---> (=SUMIF formula for file 2)
MSL          GEP         ..
Contingency  GEP         ..   ---> drag down to here (end of file 2)

依此类推每个文件。

我认为我的第一个代码实际上将 SUMIF 公式放在 Amount 列的下一个可用单元格并将其向下拖动会起作用,但它只是将 SUMIF 公式放在 Amount 之后的第一行(Amount 在 F1 中 - 所以只有 20 是显示)并且没有其他任何内容被拖下......我不太确定我的代码有什么问题,无论是自动填充还是它如何读取每个文件。

如果有人对此问题有任何见解或需要更多说明,请随时发表评论/询问。

任何帮助将不胜感激!

编辑:即使我只使用一个文件并输入另一个类似的代码

With BD.Sheets("Sheet1")
            .Range("F" & .Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row).Select
            Selection.AutoFill Destination:=.Range("F" & .Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row & ":F" & .Cells(Rows.Count, 4).End(xlUp).Row)
End With

... F2 中只显示一个值,下面什么都没有

4

1 回答 1

2

您的选择是否有可能不在打开的工作表上起作用?我不确定 BD 设置在哪里,但可以这么说,确保它完全按照你认为它的作用。

我可能会修改代码以确保这样:

...
''Open each file found
For Each itm In Split(strFileNames, ",")
    If itm <> "" Then
        Set wb = Workbooks.Open(spath & itm)
        Set ws = ws.sheets(whateversheet)

        ws.Range("F" & Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row).Formula = "=SUMIF('" & spath & "[" & itm & "]Sheet1'!$D$13:$D$" & LastRow2 & ",D" & BD.Sheets("Sheet1").Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row & ",OFFSET('" & spath & "[" & itm & "]Sheet1'!$D$13:$D$" & LastRow2 & ",0,MATCH(E" & BD.Sheets("Sheet1").Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row & ",'" & spath & "[" & itm & "]Sheet1'!$D$12:$R$12,0)-1))"
        With ws
            .Range("F" & .Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row).AutoFill Destination:=.Range("F" & .Cells(Rows.Count, 6).End(xlUp).Offset(1, 0).Row & ":F" & .Cells(Rows.Count, 4).End(xlUp).Row)
        End With
    End If
Next itm

我也可以确保

Rows.Count

正确出现。不确定它是如何计算的,但在调用 AutoFill 时可能会引起一些麻烦。

于 2012-09-17T21:45:13.830 回答