我正在使用Excel,并且有一些基本的VBA /宏知识。我有一个相当大的数据集,每周都会更新。在此基础上,我使用一系列Index/match为特定产品生成一个40列(日期)乘4行(时间序列数据)的表。我有15-20种不同的产品,它们经常变化。然后使用这个4x40表格来生成图表。使用这种方法,我可以用下拉框选择产品(数据验证),我的索引/匹配将正确的数据拉到4x40表中,然后显示该产品的图表。但我希望有一个宏,它可以为产品1生成图表,将其作为图像复制并粘贴到word文档中,然后对产品2和3执行相同的操作,依此类推,然后将单词文档保存为pdf以供分发。
一种选择是创建15-20个4x40表和15-20个图表,然后复制/粘贴所有这些表,但随着产品的更改,如果需要更改格式,这将成为一场噩梦。
发布于 2019-01-15 00:51:52
如果没有看到你确切的工作表,很难给出一段确切的代码。然而,我最近做了一个与此类似的要求的工作簿。
作为答案的大纲,您可以考虑使用循环遍历您的15 - 20个产品列表,将每个产品放入您当前进行数据验证的单元格中(确保您首先删除了任何验证),这将更新索引匹配以及您的图表。在该循环中,您可以包含一些代码,以便在转到下一个产品之前将工作表保存为pdf (或者将图表放在单独的工作表中并显式引用它)。
例如,如果你的验证是在单元格A1工作表“表”中,而你的产品列表是A2:A20工作表" products“,这样的东西会让你得到一些好处;
Sub save_charts()
Dim i As Long
Dim path As String
Dim product_name As String
Dim ws_name As String
Dim file_name As String
i = 2
path = Application.DefaultFilePath
Do Until Worksheets("Products").Cells(i, 1).Value = ""
If Worksheets("Products").Cells(i, 1).Value <> "" Then
product_name = Worksheets("Table").Cells(1, 1).Value
ws_name = product_name & " Chart"
file_name = path & "\" & ws_name
Worksheets("Table").Cells(1, 1).Value = Worksheets("Products").Cells(i, 1).Value
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
file_name, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True
End If
i = i + 1
Loop
End Sub
我知道你提到在导出为pdf之前将其复制到word中?这是一项要求吗?因为此代码仅使用Excel的本机导出到pdf功能。
我希望这能帮到你。
干杯。
发布于 2019-01-15 19:52:03
一种替代方案,将自动生成所有20个图表与每次刷新0 vba将是做以下步骤1次: 1.创建一个透视表和透视表图表,你需要为给定的产品,例如过滤它在一个单一的产品代码,创建基本图表,现在推迟格式化。此数据透视表的源数据需要包括所有20个产品的数据
<
此时,您唯一需要的vba是循环浏览每个包含有效图表的工作表,并保存为pdf
https://stackoverflow.com/questions/54190797
复制