尝试填充按日期范围分段的报表

时间:2018-06-01 20:26:18

标签: excel excel-vba excel-2010 vba

我正在尝试从基于Excel的源文件创建声明报告。宏按策略编号过滤源数据,然后在保存副本之前填充报告模板。我已经完成了我需要的大部分工作,但我正在努力填充报告的一个标签。我正在努力解决这个问题,因为该报告由几个单独的表组成,这些表按政策期划分源数据。人口逻辑如下:
从索赔数据(B2)获取第一个保单期值并复制到报告模板的A9。然后,对于策略周期= A9的每行索赔数据,将列C:H中的索赔数据复制到从单元格A12开始的报告模板中。一旦达到新的策略周期,宏应跳到下一个表执行相同的逻辑。应该重复此过程,直到达到索赔数据的最后一行。报告模板中的每个表由14行分隔。

报告模板:
Report Template

索赔数据:
Claim Data

预期结果:
Intended Result

数据填写完成后,我会有一个单独的代码块来计算总数并删除空白行。我真的只是坚持这个报告人口。这是经过几天挫折后我想出的最好的尝试:

Sub PopulateDetailsPDF()

Dim SourceData As Workbook, LossRun As Workbook
Dim ClaimData As Worksheet, DetailsPDF As Worksheet, TotalData As Worksheet
Dim LastSourceRow As Integer, PolPeriodRow As Integer, i As Integer
Dim PolPeriod As Variant, LastPolPeriod As Variant

Set SourceData = Workbooks("Cyber Claims DB for Macro - Copy.xlsx")
Set LossRun = Workbooks("WIP_Cyber Loss Run Template.xlsm")
Set ClaimData = SourceData.Sheets("Sheet1")
Set DetailsPDF = LossRun.Sheets("Details (PDF)")

 With ClaimData
    LastSourceRow = .Range("A" & .Rows.Count).End(xlUp).Row
    For i = 2 To LastSourceRow
        PolPeriod = ClaimData.Range("E" & i)
        LastPolPeriod = ClaimData.Range("E" & i)
        DetailsPDF.Range("A" & i + 7).Value = ClaimData.Range("E" & i)
            If PolPeriod = LastPolPeriod Then
                Do Until PolPeriod <> LastPolPeriod
                    DetailsPDF.Range("A" & i + 10).Value = ClaimData.Range("F" & i)
                    DetailsPDF.Range("B" & i + 10).Value = ClaimData.Range("G" & i)
                    DetailsPDF.Range("C" & i + 10).Value = ClaimData.Range("H" & i)
                    DetailsPDF.Range("D" & i + 10).Value = ClaimData.Range("I" & i)
                    DetailsPDF.Range("E" & i + 10).Value = ClaimData.Range("J" & i)
                    DetailsPDF.Range("F" & i + 10).Value = ClaimData.Range("K" & i)
                    LastPolPeriod = ClaimData.Range("E" & i)
                Loop
            End If
        Next
    End With

End Sub

这当前将第一个策略周期填充到A9,然后在冻结之前填充第一个表的第一行。我熟悉非常基本的For循环,但添加任何条件逻辑超出了我的专业知识。提前感谢您的任何建议!

0 个答案:

没有答案