是否可以在Excel工作表中嵌入的Word文档中编辑内容控件框的属性?

时间:2018-01-17 08:37:20

标签: excel ms-word

我在Excel工作表中嵌入了Word 2010文档。我想在word文档中创建内容控制框,可以以编程方式填充。为此,我需要为内容控件设置标签。

我在MSDN website和其他一些消息来源上读到它很简单 - 您只需启用设计模式,然后右键单击内容控制框并单击属性。但是,即使我在设计模式下,属性选项也会显示为灰色并禁用。

当我在独立的Word文档(不是嵌入式文档)上执行此操作时,它可以正常工作。这就是我现在正在使用的解决方法。但是,必须在独立的Word文档中创建框并将它们复制到Excel中嵌入的文档中,这真的很不方便。

是否可以在Excel工作表中嵌入的Word文档中编辑内容控件框的属性?

1 个答案:

答案 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