我正在尝试从基于Excel的源文件创建声明报告。宏按策略编号过滤源数据,然后在保存副本之前填充报告模板。我已经完成了我需要的大部分工作,但我正在努力填充报告的一个标签。我正在努力解决这个问题,因为该报告由几个单独的表组成,这些表按政策期划分源数据。人口逻辑如下:
从索赔数据(B2)获取第一个保单期值并复制到报告模板的A9。然后,对于策略周期= A9的每行索赔数据,将列C:H中的索赔数据复制到从单元格A12开始的报告模板中。一旦达到新的策略周期,宏应跳到下一个表执行相同的逻辑。应该重复此过程,直到达到索赔数据的最后一行。报告模板中的每个表由14行分隔。
数据填写完成后,我会有一个单独的代码块来计算总数并删除空白行。我真的只是坚持这个报告人口。这是经过几天挫折后我想出的最好的尝试:
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循环,但添加任何条件逻辑超出了我的专业知识。提前感谢您的任何建议!