如何从同一模板为不同的输入/方案生成多个图表

时间:2019-01-14 23:40:13

标签: excel vba

我正在使用Excel,并且具有一些基本的VBA /宏知识。我有一个合理的大数据集,每周更新一次。从该Im使用一系列索引/匹配来生成一个表,该表是特定产品的40列(日期)乘4行(时间序列数据)。我有15-20种不同的产品,它们经常变化。然后使用此4x40表格生成图表。手动使用此选项,我可以选择带有下拉框的产品(数据验证),我的索引/匹配项将正确的数据拖入4x40表中,并显示该产品的图表。但是我想有一个宏,该宏将生成产品1的图表,将其复制并粘贴为图像到word doc,然后对产品2和3进行同样的操作,依此类推,然后保存word doc作为pdf分发。

一个选项是创建15-20张4x40表格和15-20张图表,然后仅复制/粘贴所有表格,但是随着产品的变化,如果维护,这将成为噩梦,如果请求格式更改的可能性很大。

2 个答案:

答案 0 :(得分:0)

没有看到您的确切工作表很难给出确切的代码。但是,我最近制作了一个工作簿,要求与此类似。

作为答案的概述,您可以考虑使用循环遍历15-20种产品的列表,将每种产品放置在当前具有数据验证的单元中(确保先删除任何验证),这样可以然后更新索引匹配项以及您的图表。 在该循环中,您可以包含一些代码,以便在继续使用下一个产品之前将工作表另存为pdf(或将图表放置在单独的工作表上并明确引用此内容)。

例如,如果您的验证位于A1工作表“表格”中,而您的产品列表是A2:A20工作表“产品”,则类似的内容会为您提供一些帮助;

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功能。

我希望这会有所帮助。

干杯。

答案 1 :(得分:0)

将每次刷新0 vba自动生成全部20个图表的替代方法是执行以下步骤1次: 1.创建给定产品所需的数据透视表和数据透视表图表,例如,根据单个产品代码对其进行过滤,创建基本图表,暂不设置格式。此数据透视表的源数据需要包括所有20种产品的数据

  1. 在步骤1的源数据中,添加另一个名为FilterID的列,并通过公式进行设置,以使1 =第一个乘积的数据; 2,第二; 3,等等。

  2. 返回到步骤1数据透视表,并将FilterID添加为数据透视过滤器,将其设置为1,这样图表上只会显示第一个产品

  3. 设置图表格式以品尝

  4. 现在将包含数据透视表和数据透视图的工作表复制20次

  5. 在每个副本上增加FilterID

此时,您唯一需要的vba是通过有效的图表循环浏览每个工作表并保存为pdf