将多个透视图导出为新的word文档

时间:2015-11-05 14:38:49

标签: excel vba excel-vba charts ms-word

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

我正在创建一个自动Excel文档来生成一系列数据透视图,虽然这部分工作正常,但我现在想要添加一个宏,然后将所有这些图表导出到一个新的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`

所以我对这个脚本有一些问题 - 单词文档似乎不会改变方向 - 我还需要将文档尺寸为A3并且边距较窄,以便最大限度地利用空间 - 我需要在同一个文档中添加另外几个图表,在这一个代码中有什么方法可以做到这一点,用一个页面隔开? - 当前代码不会更改Word文档中图表的大小,而是更改为我的Excel文件? - 代码当前粘贴为图片,而不是数据透视表。无论如何要改变这个吗?

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

1 个答案:

答案 0 :(得分:0)

你是对的,这里有很多问题,并且在StackOverflow的一篇文章中不太常见。另外,我在没有生产机器的情况下旅行,所以我可能无法解决所有问题,但是,让我们看看我们是否至少可以让事情发生变化...... / p>

  1. 当您的代码处理多个应用程序时,您需要确保VBA了解它应该在哪里工作。当应用程序都支持相同的对象名称时,这是一个问题。在这种情况下,Excel和Word都使用" Selection"。
  2. 您可以通过声明特定于应用程序和实例化的对象来解决此问题,例如:

    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对象,声明一个变量并在创建新文档时将其实例化:

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

    3. 而不是使用Selection来处理文本,而是使用Range对象。同样,您需要将其与Excel范围区分开来,以便:

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

      当您完成操作范围的一部分并想要输入新内容时,您必须将焦点移动到范围的边缘(开始结束)。否则,您最终将替换原始内容。可以想象它就像按左箭头键或右箭头键来折叠UI中的选择:wdRng.Collapse wdCollapseEnd

      1. 从Excel粘贴图表时,最大的问题是:是否已选中?如果是,则可以使用wdSel,重新调整大小将起作用。
      2. 如果没有,则需要确定它是粘贴为Shape还是InlineShape。这取决于用户如何配置他的Word安装。我无法记住,但我认为PasteSpecial可能有一个参数,允许您设置内联...