将多个透视图导出到新的单词文档

我想知道是否有人可以帮助我,我确信这是一个非常简单的过程,但我完全不知道我在用VBA做什么。

我正在创build一个自动化的Excel文档来生成一系列的数据透视图,虽然这部分工作正常,我现在正在寻找添加一个macros,然后将所有这些图表导出到一个新的Word文档。

我在网上发现了一些代码似乎在某些方面工作,但它不是我所期待的。 请参阅下面的代码:

`Sub ChartToWord() Dim wdApp As Word.Application 'Copy Chart Sheets("SHEET NAME HERE").Select ActiveSheet.ChartObjects("Chart 1").Activate ActiveChart.ChartArea.Copy On Error Resume Next 'Try to establish link to open instance of Word Set wdApp = GetObject(, "Word.Application") 'If this fails, open Word If wdApp Is Nothing Then Set wdApp = GetObject("", "Word.Application") End If On Error GoTo 0 With wdApp 'Add new document .Documents.Add 'Make Word visible .Visible = True End With With wdApp.Selection 'Go to end of document and insert paragraph .PageSetup.Orientation = wdOrientLandscape .PageSetup.PaperSize = wdPaperA3 .PageSetup.MirrorMargins = wdNarrow .EndKey Unit:=wdStory .Font.Bold = wdToggle .Font.Size = 18 .TypeText Text:="Title of Page to go here" .Font.Size = 10 .TypeParagraph 'Paste Chart .PasteSpecial , Link:=False, DataType:=14, _ DisplayAsIcon:=False End With With Selection .Width = 500 .Height = 500 End With 'Release object variable Set wdApp = Nothing End Sub` 

所以,我对这个脚本有一些问题 – Word文档似乎没有改变方向,因为它应该 – 我还需要文件的大小A3和边缘较窄,以最大限度地利用空间 – 我会需要添加另外几个图表到这个相同的文件,有没有什么办法,我可以做到这一个代码中,由一个页面分隔? – 当前的代码不会更改Word文档中的图表大小,而是在我的Excel文件中? – 代码当前粘贴为图片,而不是数据透视表。 有反正改变这个吗?

如果我在这里问了很多,我真的很抱歉,我对VBA一无所知,而且我有点头大了。

你是对的,这里有很多的问题,在StackOverflow的一篇文章中并不常见。 另外,我在旅途中没有生产机器,所以我可能无法在这里解决所有问题,但是让我们看看是否至less可以让事情发展。

  1. 当你的代码处理多个应用程序时,你需要确保VBA知道它应该在哪里工作。 当应用程序都支持相同的对象名称时,这是一个问题。 在这种情况下,Excel和Word都使用“select”。

您可以通过声明特定于应用程序的对象并实例化来解决此问题,例如:

 Dim wdSel as Word.Selection, xlSel as Excel.Selection Set wdSel = wdApp.Selection Set xlSel = Application.Selection 
  1. 你的Word.Application实例是错误的。 如果第一次GetObject不起作用,它可能不会第二次工作。 “打开Word”: Set wdApp = new Word.Application

  2. 我不确定在wdApp.Selection块中引用的属性列表是否属于Selection对象。 正确地说,他们的前几个属于Document.PageSetup对象。 您应该对帮助/文档中的每个属性进行一些研究,并确保您正确地调用它们。 为了使用Document对象,在创build新文档时声明一个variables并对其进行实例化:

    Dim wdDoc as Word.Document = wdApp.Documents.Add()

而不是使用select来处理文本,使用范围对象。 再次,你需要区分这个从Excel范围,所以:

 Dim wdRng as Word.Range Set wdRng = wdSel.Range wdRng.Text = "Title text here" wdRng.Font.Name = "Arial" 'and so on 

当你完成了操作Range的一部分并且想要放入新的东西的时候,你必须把焦点移动到Range的边缘(结束的开始)。 否则,你会最终取代原来的内容。 想想就像按下左右箭头键折叠UI中的select: wdRng.Collapse wdCollapseEnd

  1. 从Excel中粘贴图表时,最大的问题是:是否被选中? 如果是的话,那么你可以使用wdSel,重新resize的工作。

如果不是,那么您需要确定它是否被粘贴为Shape或InlineShape。 这取决于用户如何configuration他的Word安装。 我不记得了,但我认为PasteSpecial可能有一个参数,可以让你设置是否内联…