[英]VBA Excel to Word automation not holding formatting
再会
我构建了一个插件,可以帮助我通过单击按钮将范围、工作表和整个工作簿从 Excel 传输到 Word。 它工作得很好,但是当 Excel 范围在某些情况下发生变化时,Word 格式会完全崩溃。 Word 表格也是在事后格式化的,但是当我们刷新数据时,Word 格式也跳得比页面更宽,或者与 Word 和 Excel 中的更改完全不同步。
有谁知道如何:
复制粘贴此信息,以便在 Word 链接工作表 Object 上自动启用“更新后保留格式”?
链接没有自动更新?
更无缝地传输信息而没有 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,启动注册表编辑器并导航至:
添加新的 DWORD 值:
QFE_波士顿
将新的 DWORD 值设置为 1
当然,您可以使用 VBA 应用注册表编辑,但您需要测试 Word 版本才能知道要编辑哪个键。
至于你的编号问题:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.