我已经创建了创建并在Excel 2007工作簿文件填充自定义文档属性的程序。不过,我一直无法显示工作表单元格此属性的值。在Word 2007中你可以选择“插入 - >快速部件 - >字段...”,并使用DocProperty域显示在文档中的自定义字段的值。但是我还没有发现类似的功能在Excel 2007中。

是否有人知道如何在Excel工作表单元格中显示自定义文档属性的值?我宁愿类似于上面提到的Word 2007中的解决方案的解决方案。我宁愿不使用宏/自定义代码这一点。

有帮助吗?

解决方案

不幸的是,我相信你需要使用一个用户定义的函数。添加一个新的VBA模块您的工作簿,并添加此功能:

Function DocumentProperty(Property As String)
  Application.Volatile
  On Error GoTo NoDocumentPropertyDefined
  DocumentProperty = ActiveWorkbook.BuiltinDocumentProperties(Property)
  Exit Function
NoDocumentPropertyDefined:
  DocumentProperty = CVErr(xlErrValue)
End Function

Application.Volatile呼叫迫使细胞对每次重新计算确保它会拿起变化文档属性进行更新。

其他提示

在Excel中的等效将是经由式,我不认为这是可能提取一个文件属性,而不代码。有没有本地函数挑选出文档属性。 (另一种可能是存储在工作簿/工作表名称,它们是通过式访问的信息)

在VBA你必须创建一个函数是这样的:

Public Function CustomProperty(ByVal prop As String)

    CustomProperty = ActiveWorkbook.CustomDocumentProperties(prop)

End Function

和然后调用它与=CustomProperties("PropertyName")在公式中

还有另一种微妙的点。式依赖关系仅涉及其他细胞;这个公式依赖于自定义属性。如果更新的自定义属性一个预先存在的公式涉及CustomProperty不会自动更新。细胞将必须手动地重新评估或通过重计算强制整个工作簿。你最好的机会是使功能不稳定,这意味着该公式将每个小区改变来recalc'd - 但这仍然意味着如果一个单元格已被更改,你只能得到一个更新

选择您要提取的细胞 重命名小区一些有用的。从 “B1” 到 “PROJECT_NUMBER”。 打开“高级属性”,单击“自定义”选项卡。新属性输入名称。点击“链接到内容”选择单元格名称从“值”下拉列表中。

我希望我能采取cerdit但我找到了答案在网上: 的http:// pdmadmin。 COM / 2012/03 /显示定制属性值功能于Excel的使用-A-命名范围/

可以命名范围链接到一个自定义属性,但随后的自定义属性反映的[第一电池的]范围中的值。它的有效只读;您可以更改单元格的内容更新的财产,而不是周围的其他方式。

我知道你想避免,但如果你想有一个公式中使用的属性值,你必须的创建自定义表函数来这样做。

我经历过同样的问题,其他人都有。所以我会尽量全面涵盖我如何处理它。

首先,你必须比写作目的是让不管你把自定义或内置属性,使“问题”电池在这种方式指向的功能没有其他选择:

=yourPropertyGettingFunctionName(PropertyName)

属性名是指自定义你想/内置的属性,其值在单元格中显示的名称的字符串。

该函数可以写成(如以前所建议的)为:

Public Function StdProp(ByVal sPropName As String) As String
    Application.Volatile
    StdProp = ActiveWorkbook.BuiltinDocumentProperties(sPropName).Value
End Function

有一个内置的属性,或为:

Public Function UsrProp(ByVal sPropName As String) As String
    Application.Volatile
    On Error GoTo UndefinedProp
    UsrProp = ActiveWorkbook.CustomDocumentProperties(sPropName)
    GoTo Exit
UndefinedProp:
    UsrProp  = "n/a"
Exit:
End Function

如已经提及的,包括Application.Volatile将允许半自动细胞内容更新。

然而,这造成对自己的一个问题:每当你打开你的Excel文件,使用这样的关系中的所有单元格将得到更新,并且你的时间退出该文件,Excel将询问您的许可更新,不管你没有介绍它的任何变化或没有,因为Excel本身一样。

在我的开发团队,我们使用Subversion作为版本控制系统。如果你无意中退出点击“更新”,SVN会注意到它,下次要提交更改的时间,Excel文件将包含在包。

所以我决定用一切在手,做什么,我需要和避免,同时,这种自我更新的效果我不想。

这意味着在与属性访问功能/ s的组合使用指定范围。 鉴于这一事实,我不能指望旧文件有规定,我的新的需求,我写了这个功能:

Private Function RangeAssign(sRange As String, sValue As String) As Integer
Dim rDest As Range
    If RangeCheck(sRange) Then
        Set rDest = Range(sRange)
    Else
        Set rDest = Application.InputBox(sMsg + vbCrLf + vbCrLf + _
            "Please, select a cell to get" + vbCrLf + _
            "the name " + sRange + " assigned", sCopyRight, Type:=8)
        rDest.Name = sRange
    End If

    rDest.Cells(1, 1).NumberFormat = "@"
    rDest.Cells(1, 1).Value = sValue

    RangeAssign = True

End Function

它允许目的地小区的正确选择。当一个属性分配值(比方说,“作者”,这恰好是一个内置的一个),我还更新存储在指定的范围内的值,并且可以在一个单元中写:

=Author

如果我碰巧的范围:一个名为“作者”和充满值的“A1”单元格为内置属性“作者”,这是我需要更新我们自己的外部跟踪。

这一切不是一朝一夕的事。我希望能有一定的帮助。

我用这个用于提取SharePoint属性(基于马丁的回答):

Public Function DocumentProperty(Property As String)
    Application.Volatile
    On Error GoTo NoDocumentPropertyDefined

    DocumentProperty = ActiveWorkbook.ContentTypeProperties(Property).Value
Exit Function

NoDocumentPropertyDefined:
    DocumentProperty = CVErr(xlErrValue)
End Function
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top