在Excel 2007工作表单元格显示自定义文档属性值
-
13-09-2019 - |
题
我已经创建了创建并在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