我在Excel工作表中嵌入了Word 2010文档。我想在word文档中创建内容控制框,可以以编程方式填充。为此,我需要为内容控件设置标签。
我在MSDN website和其他一些消息来源上读到它很简单 - 您只需启用设计模式,然后右键单击内容控制框并单击属性。但是,即使我在设计模式下,属性选项也会显示为灰色并禁用。
当我在独立的Word文档(不是嵌入式文档)上执行此操作时,它可以正常工作。这就是我现在正在使用的解决方法。但是,必须在独立的Word文档中创建框并将它们复制到Excel中嵌入的文档中,这真的很不方便。
是否可以在Excel工作表中嵌入的Word文档中编辑内容控件框的属性?
答案 0 :(得分:1)
它可以通过编程方式完成,类似于后面的代码片段。
嵌入式Word文档是Excel OLEObject;可以命名这样的对象,例如:ws.Objects(1).Name =“WordDoc” - 它保存在工作簿中并保持不变,即使稍后添加其他对象也是如此。这不会命名文档,只会命名工作表表面上的对象。
如果在会话期间从未访问过嵌入文档,则首先需要激活它。这样做会导致屏幕跳转并且选择要更改,包括IF条件以测试它并首先激活OLEObject,以及重新选择之前处于活动状态的单元格。
使用.Tag属性显示在For Each ... Next循环中。如果进入设计模式,可以看到结果。
请注意,如果您处于设计模式或选择位于嵌入的Word文档中,则宏将无法工作。
Sub Test()
Dim ws As Excel.Worksheet
Dim currCel As Excel.Range
Dim oDoc As OLEObject
Set currCel = Application.Selection
Set ws = ActiveWorkbook.Worksheets("Sheet1")
'Debug.Print ws.OLEObjects.Count
Set oDoc = ws.OLEObjects("WordDoc")
' Debug.Print oDoc.OLEType 'Type 1 = Embedded
WorkWithWordDoc oDoc, currCel
End Sub
Sub WorkWithWordDoc(oDoc As OLEObject, selRange As Excel.Range)
Dim doc As Word.Document
Dim wasActivated As Boolean
Dim cc As Word.ContentControl
'On first opening the Workbook
'the OLE interface of the OLEObject
'isn't accessible, so activate it
wasActivated = True
On Error Resume Next
Set doc = oDoc.Object
If Err.Number = 1004 Then
Excel.Application.ScreenUpdating = False
oDoc.Activate
wasActivated = False
Set doc = oDoc.Object
Excel.Application.ScreenUpdating = True
End If
On Error GoTo 0
For Each cc In doc.ContentControls
cc.Tag = "CC in embedded Doc"
Next
'Clean up
If Not wasActivated Then
'Deactivate the document
selRange.Select
End If
Set doc = Nothing
End Sub