Excel VBA报表编辑
问题描述:
我一直致力于在MS Excel中创建动态报表。我正在研究传统的VB6应用程序,并且遇到了一些我希望你们可以帮我解决的问题。我在下面做的是将数据抓取到我的记录集g_RS3中 - 通常这有3到20个项目,我使用g_RS3在我的Excel中输入值(标题和每个标题下的2列值)电子表格。我试图对它进行编辑,但我一直在努力。这是我的代码....Excel VBA报表编辑
Do While Not g_RS3.EOF
With xlSheet.Cells(xlRow, xlCol)
.Value = g_RS3("Label")
.Offset(1, 0).Value = "Clients"
.Offset(1, 1).Value = "Buyers"
With .Offset(1, 0)
.Font.Bold = True
.Borders.Weight = xlThin
End With
With .Offset(1, 1)
.Font.Bold = True
.Borders.Weight = xlThin
End With
With .Resize(1, 2)
.Font.Bold = True
.WrapText = True
.VerticalAlignment = xlCenter
.Merge
.HorizontalAlignment = xlCenter
.Borders.Weight = xlThin
End With
End With
xlCol = xlCol + 2
g_RS3.MoveNext
Loop
我附上了一个图像,它会显示它的样子。在记录集的末尾,我试着添加另一个标题,它只是表示TOTAL并且在其下面有2列。但我很难做到这一点。
答
这是很有道理,从你的主代码中提取的独立片的功能的情况下:头块格式可以去到一个单独的小组,这样你就可以从记录中调用它环或单组标题
的主代码然后变成
'headers from recordset
Do While Not g_RS3.EOF
DoBlock xlsheet.Cells(xlRow, xlCol), g_RS3("Label"), "Clients", "Buyers"
g_RS3.MoveNext
xlCol = xlCol + 2
Loop
'Extra header
DoBlock xlsheet.Cells(xlRow, xlCol), "Total", "Clients", "Buyers"
提取的代码: 编辑 - 收拾
Sub DoBlock(rng As Range, h1, h2, h3)
With rng
.Value = h1
.WrapText = True
.VerticalAlignment = xlCenter
.HorizontalAlignment = xlCenter
.Offset(1, 0).Value = h2
.Offset(1, 1).Value = h3
With .Resize(2, 2)
.Font.Bold = True
.Borders.Weight = xlThin
End With
.Resize(1, 2).Merge
End With
End Sub
+0
两个答案都是正确的,谢谢各位! – FatBoySlim7
答
我认为只是增加一个WITH语句添加细胞总数后你的循环会做到这一点。 xlCol应该已经基于循环的最后一部分(xlCol = xlCol + 2)指向下一列,所以我认为这应该起作用。
Do While Not g_RS3.EOF
With xlSheet.Cells(xlRow, xlCol)
.Value = g_RS3("Label")
.Offset(1, 0).Value = "Clients"
.Offset(1, 1).Value = "Buyers"
With .Offset(1, 0)
.Font.Bold = True
.Borders.Weight = xlThin
End With
With .Offset(1, 1)
.Font.Bold = True
.Borders.Weight = xlThin
End With
With .Resize(1, 2)
.Font.Bold = True
.WrapText = True
.VerticalAlignment = xlCenter
.Merge
.HorizontalAlignment = xlCenter
.Borders.Weight = xlThin
End With
End With
xlCol = xlCol + 2
g_RS3.MoveNext
Loop
With xlSheet.Cells(xlRow, xlCol)
.Value = "TOTAL"
.Offset(1, 0).Value = "Clients"
.Offset(1, 1).Value = "Buyers"
With .Offset(1, 0)
.Font.Bold = True
.Borders.Weight = xlThin
End With
With .Offset(1, 1)
.Font.Bold = True
.Borders.Weight = xlThin
End With
With .Resize(1, 2)
.Font.Bold = True
.WrapText = True
.VerticalAlignment = xlCenter
.Merge
.HorizontalAlignment = xlCenter
.Borders.Weight = xlThin
End With
End With
这不应该是一个数据透视表吗?只需将您的原始数据转储到工作表中,然后进行转换即可。没有? –
不确定。我在报告中完成了大约95%的工作,我只是提出了一个总TOTAL标题可以帮助完成所有总计的请求。试图看看我可以在我的记录集结束时动态添加它。 – FatBoySlim7
侧面问题:如果'g_RS3'包含*标题*,那为什么它不叫'rsHeadings'呢? –