Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Excel中格式化的Excel数据更新Word书签_Excel_Vba_Ms Word - Fatal编程技术网

使用Excel中格式化的Excel数据更新Word书签

使用Excel中格式化的Excel数据更新Word书签,excel,vba,ms-word,Excel,Vba,Ms Word,下面的代码旨在使用Excel中的格式化数据更新Word书签,但是没有遇到格式化,并且不确定原因,如果您有任何建议,我们将不胜感激。格式化的数据是带有下划线的文本 Set wb = ActiveWorkbook TodayDate = Format(Date, "mmmm d, yyyy") Path = wb.Path & "\update_file.docx" 'Create a new Word Session Set pappWord = CreateObject("Word.

下面的代码旨在使用Excel中的格式化数据更新Word书签,但是没有遇到格式化,并且不确定原因,如果您有任何建议,我们将不胜感激。格式化的数据是带有下划线的文本

Set wb = ActiveWorkbook
TodayDate = Format(Date, "mmmm d, yyyy")
Path = wb.Path & "\update_file.docx"

 'Create a new Word Session
Set pappWord = CreateObject("Word.Application")

 'Open document in word
Set docWord = pappWord.Documents.Add(Path)

 'Loop through names in the activeworkbook
For Each xlName In wb.Names
     'if xlName's name is existing in document then put the value in place of the bookmark
    If docWord.Bookmarks.Exists(xlName.Name) Then
    docWord.Bookmarks(xlName.Name).Range.Text = Range(xlName).Text  
    End If
Next xlName

请改用
Copy
和(文档不完整的)
ExecuteMso
方法尝试此操作。您需要对范围使用
Copy
(以便捕获格式),然后可以有效地执行与右键单击“粘贴+保留源格式”选项相同的操作:

或者,这可能更好,因为
ExecuteMso
是异步的,可能会导致计时问题:

xlName.RefersToRange.Copy
docWord.Bookmarks(xlName.Name).Range.PasteAndFormat 16 'wdFormatOriginalFormatting

请改用
Copy
和(文档不完整的)
ExecuteMso
方法尝试此操作。您需要对范围使用
Copy
(以便捕获格式),然后可以有效地执行与右键单击“粘贴+保留源格式”选项相同的操作:

或者,这可能更好,因为
ExecuteMso
是异步的,可能会导致计时问题:

xlName.RefersToRange.Copy
docWord.Bookmarks(xlName.Name).Range.PasteAndFormat 16 'wdFormatOriginalFormatting

格式设置不正确且不确定原因,因为
范围。Text
仅返回单元格中的纯文本:)您无法使用对象模型将格式从Excel传递到Word。尝试复制Excel区域并将其粘贴到Word区域。为了获得最佳效果,请测试Word的“粘贴选项”按钮和/或“特殊粘贴”中的各种选项。找到最佳方法后,记录Word宏以获得准确的粘贴语法。@Cindymister(理论上)应该可以这样做并将格式镜像到Word。但是当
Copy
和几个
Paste/PasteSpecial
选项中的一个应该足以满足大多数用例时,这似乎是不必要的复杂。OP已报告成功使用了范围为Range.Text»Range(xlName)的对象模型。文本将保留单元格格式(例如日期、货币)但不是字符格式。因为你是这个网站的新手,Donk:如果@DavidZemens answer修复了这个问题,正如你在评论中指出的那样,那么在堆栈溢出上,点击贡献左边的复选标记以表明它是“答案”是很重要的。这有助于其他使用该网站的人为他们的努力奖励“点”:)格式没有出现并且不确定原因,因为
范围。Text
仅返回单元格中的纯文本:)您无法使用对象模型将格式从Excel传递到Word。尝试复制Excel区域并将其粘贴到Word区域。为了获得最佳效果,请测试Word的“粘贴选项”按钮和/或“特殊粘贴”中的各种选项。找到最佳方法后,记录Word宏以获得准确的粘贴语法。@Cindymister(理论上)应该可以这样做并将格式镜像到Word。但是当
Copy
和几个
Paste/PasteSpecial
选项中的一个应该足以满足大多数用例时,这似乎是不必要的复杂。OP已报告成功使用了范围为Range.Text»Range(xlName)的对象模型。文本将保留单元格格式(例如日期、货币)但不是字符格式。因为你是这个网站的新手,Donk:如果@DavidZemens answer修复了这个问题,正如你在评论中指出的那样,那么在堆栈溢出上,点击贡献左边的复选标记以表明它是“答案”是很重要的。这有助于其他使用该网站的人为他们的努力奖励“分数”: