VBA设置自定义文档属性

时间:2013-07-01 14:13:15

标签: excel excel-vba vba

我遇到了一些麻烦,我确信这是一个快速修复。我有一个excel doc,其自定义文档属性字段为“Script Status”。脚本状态属性来自文档库中从中下载文档的列。我的目标是让用户下载表单,完成他们分配的任务,然后运行“BeforeSave”宏扫描工作并根据宏的结果更新该脚本状态属性(即如果字段丢失,脚本会说“未完成”等)。在SharePoint中,这是一个选项下拉框,其中包含以下选项:未分配,已分配,未完成,已完成/已通过,未通过,重新测试,以及递延。我有检查工作集的逻辑并且工作正常,而不是如何更新属性字段。到目前为止我所拥有的只是:

Application.ThisWorkbook.CustomDocumentProperties.Item("Script Status").Value = "Fail"

一旦运行,我就会收到一条错误,指出“无效的程序调用或争论”。我试图研究这条线的正确语法,但一直无济于事。任何帮助都将不胜感激!

3 个答案:

答案 0 :(得分:1)

可能有一些关于来自Sharepoint的文件的怪癖,诚然这不是我熟悉的东西,但是从阅读其他线程我知道这些文件存在一些困难。这可能是也可能不是这种情况。

无论如何,我们可以尝试诊断它,也许我们会解决问题。

正如我在评论中提到的,如果我的工作簿中不存在命名的DocumentProperty(“脚本状态”),我可以复制此错误。这可能就像拼写错误一样容易。您可以使用此函数来测试命名DocumentProperty是否存在:

Function CustomPropertyExists(propName As String) As Boolean
    Dim wb As Workbook
    Dim docProp As DocumentProperty
    Dim propExists As Boolean
    Set wb = Application.ThisWorkbook
    For Each docProp In wb.CustomDocumentProperties
        If docProp.Name = propName Then
            propExists = True
            Exit For
        End If
    Next
    CustomPropertyExists = propExists
End Function

如果将其放在标准模块中,可以从工作表调用该函数,如:

=CustomPropertyExists("Script Status"),它将返回TrueFalse的值,具体取决于是否找到了指定的属性。

您可以从子程序中调用它,例如:

If CustomPropertyExists("Script Status") Then
    MsgBox "Exists!",vbInformation
Else 
    MsgBox "Does not exist", vbCritical
End If

答案 1 :(得分:1)

似乎与excel doc关联的Sharepoint属性既不是CustomDocumentProperty也不是BuiltInDocumentProperty。在尝试使用代码时,Sharepoint字段为“ContentTypeProperty”。使用ContentTypeProperty中原始问题中发布的相同代码而不是自定义属性,代码成功运行。

请参考David的代码以确定您的“属性”是否真的是自定义属性而不是内容类型。这非常有帮助!

答案 2 :(得分:0)

我不知道这是否会对任何人有所帮助,但我正在努力将.xlsm文件保存到Sharepoint网站,该网站已设置自定义属性。 我找不到解决方案,但我设法使用它来解决它。

Private Sub SaveToSharePoint()
'set the save location of the document and name
Dim FolderPath As String: FolderPath = "//sharepoint.com/sites/Shared Documents/"
Dim Type As String: Type = "Doc"
Dim CurrentYear As String: CurrentYear = CStr(Year(Date))
Dim FileName As String: FileName = Type & "_" & CurrentYear & ".xlsm"
Dim FullFilePath As String: FullFilePath = FolderPath + FileName

'Creates the initial file and saves it as .xlsm
On Error Resume Next
ThisWorkbook.SaveAs FullFilePath, FileFormat:=52

'Sets the custom properties
ThisWorkbook.ContentTypeProperties("Type").Value = Type
ThisWorkbook.ContentTypeProperties("Year").Value = CurrentYear

'Updates the file
On Error Resume Next
ThisWorkbook.SaveAs FullFilePath, FileFormat:=52 End Sub