繁体   English   中英

VBA Excel 到 Word 自动化不保留格式

[英]VBA Excel to Word automation not holding formatting

再会

我构建了一个插件,可以帮助我通过单击按钮将范围、工作表和整个工作簿从 Excel 传输到 Word。 它工作得很好,但是当 Excel 范围在某些情况下发生变化时,Word 格式会完全崩溃。 Word 表格也是在事后格式化的,但是当我们刷新数据时,Word 格式也跳得比页面更宽,或者与 Word 和 Excel 中的更改完全不同步。

有谁知道如何:

  1. 复制粘贴此信息,以便在 Word 链接工作表 Object 上自动启用“更新后保留格式”?

  2. 链接没有自动更新?

  3. 更无缝地传输信息而没有 Excel 和 Word 之间存在的所有兼容性问题?

我使用的一些代码:

Sub ExcelRangeToWord(ByVal control As IRibbonControl)

Dim tbl As Excel.Range
Dim WordApp As Word.Application
Dim myDoc As Word.Document
Dim WordTable As Word.Table
Dim newDoc As Boolean

newDoc = False

'Optimize Code
  Application.ScreenUpdating = False
  Application.EnableEvents = False

'Copy Range from Excel
  Set tbl = Selection

'Create an Instance of MS Word
  On Error Resume Next

    'Is MS Word already open?
      Set WordApp = GetObject(class:="Word.Application")

    'Clear the error between errors
      Err.Clear

    'If MS Word is not already open then open MS Word
      If WordApp Is Nothing Then
        Set WordApp = CreateObject(class:="Word.Application")
        newDoc = True
      End If

    'Handle if the Word Application is not found
      If Err.Number = 429 Then
        MsgBox "Microsoft Word could not be found, aborting."
        GoTo EndRoutine
      End If

  On Error GoTo 0

'Make MS Word Visible and Active
  WordApp.Visible = True
  WordApp.Activate

'Create a New Document or set ActiveDocument
  If newDoc Then
    Set myDoc = WordApp.Documents.Add
  Else
    Set myDoc = WordApp.ActiveDocument
  End If

'Copy Excel Table Range
  tbl.Copy

'Paste Table into MS Word
    WordApp.Selection.PasteExcelTable _
    LinkedToExcel:=True, _
    WordFormatting:=False, _
    RTF:=True

'Autofit Table so it fits inside Word Document
  Set WordTable = myDoc.Tables(1)
  WordTable.AutoFitBehavior (wdAutoFitWindow)

EndRoutine:
'Optimize Code
  Application.ScreenUpdating = True
  Application.EnableEvents = True

'Clear The Clipboard
  Application.CutCopyMode = False

End Sub

也:

Sub CopyActivesheetToWord(ByVal control As IRibbonControl)
    Dim wdApp As Word.Application, wdDoc As Word.Document, ws As Worksheet

    Application.ScreenUpdating = False
    Application.StatusBar = "Creating new document..."

    Set wdApp = New Word.Application
    Set wdDoc = wdApp.Documents.Add
    Set ws = ActiveWorkbook.ActiveSheet
    With ws
        Application.StatusBar = "Copying data from " & .Name & "..."
        .UsedRange.Copy
        On Error Resume Next
        wdDoc.Paragraphs(wdDoc.Paragraphs.Count).Range.PasteExcelTable LinkedToExcel:=True, WordFormatting:=False, RTF:=True
        Set WordTable = wdDoc.Tables(1)
        WordTable.AutoFitBehavior (wdAutoFitWindow)
        Application.CutCopyMode = False
    End With
    Set ws = Nothing

    Application.StatusBar = "Cleaning up..."
    With wdApp.ActiveWindow
        If .View.SplitSpecial = wdPaneNone Then
            .ActivePane.View.Type = wdPrintView
        Else
            .View.Type = wdPrintView
        End If
    End With

    Set wdDoc = Nothing
    wdApp.Visible = True
    wdApp.Activate
    Set wdApp = Nothing

    Application.StatusBar = False
End Sub

谢谢

链接工作簿的大小调整是设计使然,但有一个注册表编辑来防止它。 关闭 Word,启动注册表编辑器并导航至:

  • Word 2007 - HKEY_CURRENT_USER\Software\Microsoft\Office\12.0\Excel\Options
  • Word 2010 - HKEY_CURRENT_USER\Software\Microsoft\Office\14.0\Excel\Options
  • Word 2013 - HKEY_CURRENT_USER\Software\Microsoft\Office\15.0\Excel\Options
  • Word 2016 - HKEY_CURRENT_USER\Software\Microsoft\Office\16.0\Excel\Options

添加新的 DWORD 值:

QFE_波士顿

将新的 DWORD 值设置为 1

当然,您可以使用 VBA 应用注册表编辑,但您需要测试 Word 版本才能知道要编辑哪个键。

至于你的编号问题:

  1. 据推测,您指的是将 \* MERGEFORMAT 开关添加到 LINK 字段的代码中。 这对于此类字段是不必要的,除非您在插入后重新格式化它们,在这种情况下,我希望 Word 自动添加开关,但可以通过编辑字段代码来完成 - 您可以使用 VBA 来完成。
  2. 从域代码中删除 \a 开关或取消选中 Word 的“打开时更新自动域”选项 - 您也可以使用 VBA 执行此操作。请注意,如果工作簿处于打开状态,则两者均无效。
  3. 你需要澄清你的意思。 我不知道 Excel 和 Word 之间有任何“兼容性”问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM