我正在使用Excel,并且具有一些基本的VBA /宏知识。我有一个合理的大数据集,每周更新一次。从该Im使用一系列索引/匹配来生成一个表,该表是特定产品的40列(日期)乘4行(时间序列数据)。我有15-20种不同的产品,它们经常变化。然后使用此4x40表格生成图表。手动使用此选项,我可以选择带有下拉框的产品(数据验证),我的索引/匹配项将正确的数据拖入4x40表中,并显示该产品的图表。但是我想有一个宏,该宏将生成产品1的图表,将其复制并粘贴为图像到word doc,然后对产品2和3进行同样的操作,依此类推,然后保存word doc作为pdf分发。
一个选项是创建15-20张4x40表格和15-20张图表,然后仅复制/粘贴所有表格,但是随着产品的变化,如果维护,这将成为噩梦,如果请求格式更改的可能性很大。
答案 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的源数据中,添加另一个名为FilterID的列,并通过公式进行设置,以使1 =第一个乘积的数据; 2,第二; 3,等等。
返回到步骤1数据透视表,并将FilterID添加为数据透视过滤器,将其设置为1,这样图表上只会显示第一个产品
设置图表格式以品尝
现在将包含数据透视表和数据透视图的工作表复制20次
在每个副本上增加FilterID
此时,您唯一需要的vba是通过有效的图表循环浏览每个工作表并保存为pdf