2016-06-07 133 views
-1

我想修改一个VBA宏来启用Excel范围(作为图片,用于格式化目的)粘贴到Word书签。VBA excel图片到Word书签宏

Sub test2() 
Dim objWord As Object 
Dim ws As Worksheet 

Set ws = ThisWorkbook.Sheets("PREMIUMS") 
Set objWord = CreateObject("Word.Application") 

objWord.Visible = True 
objWord.Documents.Open "C:\TEST\BTM Macro Template.docx" 

With objWord.ActiveDocument 
.Bookmarks("PLAN_1_SHEET").Range.Text = ws.Range("A34").Value 
.Bookmarks("PLAN_2_SHEET").Range.Text = ws.Range("BTM_PREM").Value 
End With 
Set objWord = Nothing 
End Sub 

宏糊剂单个小区文本参考精细(“A34”),但使用一定范围“BTM_PREM”相同的代码)返回类型不匹配错误。 我知道这是由于范围不是字符串,但似乎无法确定如何修改此行以在“PLAN_2_SHEET”书签上粘贴“BTM_PREM”,如照片。

.Bookmarks("PLAN_2_SHEET").Range.Text = ws.Range("BTM_PREM").Value 
+0

考虑这里给出的建议:http://stackoverflow.com/questions/2029724/add-an-image-to-word-document-and-scale-it-using-vba – Dave

+0

@Dave - 感谢您的链接。我确实看到了这个问题,但是在开发代码的时候遇到了一些困难,以便将链接替换为引用范围的图形。 – JoeBeef

回答

0

你可以使用Excel的Range对象Copy()方法,然后要么Paste()PasteSpecial()PasteExcelTable()Range对象的方法,像如下:

ws.Range("BTM_PREM").Copy 
.Bookmarks("PLAN_2_SHEET").Range.Paste 

ws.Range("BTM_PREM").Copy 
.Bookmarks("PLAN_2_SHEET").Range.PasteSpecial Link:=True 

ws.Range("BTM_PREM").Copy 
.Bookmarks("PLAN_2_SHEET").Range.PasteExcelTable LinkedToExcel:=True, WordFormatting:=False, RTF:=True 
+0

感谢您使用这些选项,因为我希望Paste Special对象方法可以保持格式不变。我已经尝试了上面的PasteSpecial选项(如上复制),但得到一个运行时错误“Method'Range'Range'工作表失败。我是否需要进一步定义.ws以解决这个问题? – JoeBeef

+0

对于”ws.Range (“BTM_PREM”)。复制“声明以前必须具备的功能:1)将”ws“设置为有效的工作表(如”设置ws = ThisWorkbook.Sheets(“PREMIUMS”)“)2)设置一个名为”BTM_PREM“ (可以在excel UI或VBA代码中执行) – user3598756

+0

感谢您的提示。现在我已经可以使用Range.Paste选项作为测试,并且可以将Excel信息粘贴到指定的名称最后一个请求 - 是否有一行代码可以添加,以便Excel范围可以使用“保留源格式”粘贴选项粘贴到Word中?这将确保Excel数据在粘贴时不会超出Word文档的边界。 – JoeBeef

1

这是一段代码,为我的作品:

ActiveWorkbook.Sheets("Lease 1").Range("B16:AF25").CopyPicture Appearance:=xlScreen, Format:=xlPicture 
wdoc.Bookmarks("Bkmrk1").Range.Paste 
Application.CutCopyMode = False 

这不是一个完整的宏,只是它的一部分,所以你要调整一下,但我觉得你得到的理念。