2015-03-23 2 views
2

Я получаю эту ошибку:существует ли тест имя свойства

Run-time error '424' object required

, когда я пытаюсь запустить этот код:

Sub SuperSaveAs() 
Set objFSO = CreateObject("Scripting.FileSystemObject") 
Dim pathName As String 
Dim myFileName As String 

If (ActiveDocument.CustomDocumentProperties("_CheckOutSrcUrl").Value = True) Then 
    pathName = ActiveDocument.CustomDocumentProperties("_CheckOutSrcUrl").Value 
    myFileName = pathName + ActiveWorkbook.Name 
     ActiveWorkbook.SaveAs Filename:= _ 
      myFileName _ 
      , FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False 
Else 
    MsgBox "_CheckOutSrcUrl is missing" 
End If 

End Sub 

Этот макрос соединен с кнопкой в ​​Excel. Макрос проверяет, существует ли пользовательское свойство документа. Если свойство пользовательского документа существует, макрос должен сохранить файл в значение _CheckOutSrcUrl (SharePoint Directory). Как исправить ошибку?

+1

Excel не имеет 'ActiveDocument' - это' ActiveWorkbook' – Rory

ответ

7

Вы не можете использовать вышеуказанный метод, чтобы проверить, существует ли имя свойства или нет. Есть два очевидных подхода, и это не мои собственные личные ответы:

  1. Используйте цикл, чтобы изучить все имена свойств и посмотреть, если «_CheckOutSrcUrl» получает найдено. См. https://answers.microsoft.com/en-us/office/forum/office_2007-word/using-customdocumentproperties-with-vba/91ef15eb-b089-4c9b-a8a7-1685d073fb9f

  2. Используйте обнаружение ошибок VBA, чтобы узнать, существует ли свойство «_CheckOutSrcUrl». См http://www.vbaexpress.com/forum/showthread.php?15366-Solved-CustomDocumentProperties-Problem

сниппета пример # 1, приспособленный к коду - будет лучше в функции:

Dim propertyExists As Boolean 
Dim prop As DocumentProperty 
propertyExists = False 
For Each prop In ActiveDocument.CustomDocumentProperties 
    If prop.Name = "_CheckOutSrcUrl" Then 
     propertyExists = True 
     Exit For 
    End If 
Next prop 

сниппета пример # 2, приспособленный к коду:

Dim propertyExists As Boolean 
Dim tempObj 
On Error Resume Next 
Set tempObj = ActiveDocument.CustomDocumentProperties.Item("_CheckOutSrcUrl") 
propertyExists = (Err = 0) 
On Error Goto 0 
Смежные вопросы