2014-02-26 63 views
0

試圖從VBA代碼訪問CustomDocumentProperty。我檢查定製屬性存在的custom.xml文件。有什麼遺漏?這裏是docm文件!無法使用VBA訪問opn xml文檔的定製屬性

Sample document attached

更新

我試着用下面的代碼添加,但它不添加任何東西。我需要將文件標記爲已處理。有沒有其他辦法可以完成這個目標?

With ActiveDocument.CustomDocumentProperties 
    .Add Name:="CustomNumber", _ 
     LinkToContent:=False, _ 
     Type:=msoPropertyTypeNumber, _ 
     Value:=1000 
    .Add Name:="CustomString", _ 
     LinkToContent:=False, _ 
     Type:=msoPropertyTypeString, _ 
     Value:="This is a custom property." 
    .Add Name:="CustomDate", _ 
     LinkToContent:=False, _ 
     Type:=msoPropertyTypeDate, _ 
     Value:=Date 
End With 

Updated link to add custom field document

+0

我已更新我的答案以迴應您編輯的問題。 – 2014-02-28 12:18:50

回答

0

在XML(custom.xml),您的自定義文檔屬性具有fmtid = 「{3DC82474-74E0-4A77-944F-F36D8A5B0E58}」(或類似的東西)。

它需要是{D5CDD505-2E9C-101B-9397-08002B2CF9AE},否則Word將無法將其識別爲自定義文檔屬性。

對於您更新的問題,您的VBA代碼沒有問題,但Word中有錯誤。如果插入自定義文檔屬性,Word不會將該文檔標記爲「髒」,因此如果您沒有以其他任何方式更改文檔,則當它關閉時,它不會保存對屬性的更改,除非手動進入自定義文檔屬性對話框。但是,當document_close事件正在運行時,您無法這樣做。

爲了解決這個問題,我建議你把

ActiveDocument.Saved = False 

在您Document_Close事件處理程序的結束。順便說一句,如果這些屬性已經存在,那麼你的代碼將會導致錯誤。

我不認爲這在ISO標準或甚至Microsoft的實施信息文檔([MS-OI29500] .pdf中提到 - 後者中有一些信息,但它沒有幫助,實際上有點混淆

其中一些標準ID列出了here,但我找不到任何關於以「{3D」開頭的標準ID,我猜測有人使用Office Open XML直接創建了文檔,並且剛剛插入了「任何舊的GUID「

就我個人而言,我會進入XML並修復GUID(更新 - 我試過了,但每次都失敗了,最好先開始一個新文檔,然後通過sta插入屬性ndard自定義文檔屬性對話框,我認爲)。

+0

如何從VBA代碼添加定製屬性? – user581157