2

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

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

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

4

3 回答 3

2

看来与 excel 文档关联的 Sharepoint 属性既不是 CustomDocumentProperty 也不是 BuiltInDocumentProperty。在对代码进行更多尝试后,Sharepoint 字段为“ContentTypeProperty”。使用与 ContentTypeProperty 而不是自定义属性在原始问题中发布的相同代码,该代码成功运行。

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

于 2013-07-02T12:10:34.500 回答
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

如果将其放在标准模块中,则可以从 Worksheet 调用该函数,例如:

=CustomPropertyExists("Script Status")它将返回一个值TrueFalse取决于是否找到了命名属性。

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

If CustomPropertyExists("Script Status") Then
    MsgBox "Exists!",vbInformation
Else 
    MsgBox "Does not exist", vbCritical
End If
于 2013-07-01T15:38:58.330 回答
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
于 2015-01-28T13:51:25.803 回答