dsolefile - обработка ошибок, когда значение не существует (в Excel) - PullRequest
0 голосов
/ 03 апреля 2009

Я пытаюсь обновить свойства документа и создать новые записи, если они не существуют

Тем не менее этот тип вещи не работает

Set objDocProps = DSO.GetDocumentProperties(sfilename:=FileName)

With objDocProps
If .CustomProperties("ABC") Is Nothing Then
'create it here

и если я добавлю туда обработчик ошибок Это означает, что он заблокирован или потерял соединение

errhandler:
Select Case Err.Number
 Case -2147220987 ' missing custom property
 Debug.Print "missing custom property"
 With objDocProps
     .CustomProperties("ABC").Value = "banana!"

Ответы [ 2 ]

0 голосов
/ 21 апреля 2009

При попытке доступа к CustomProperties по имени возникают проблемы.

Решение, которое я реализовал, состоит в том, чтобы выполнить итерацию коллекции CustomPropery для определения индекса элемента (если он существует), а затем использовать его для установки значения (или добавления нового, если его нет)

Передача: ваш объект свойств, запись, которую вы хотите заполнить, и значение, которое вы хотите заполнить

Sub UpsertEntry(objCustomProps, entryname, entryvalue)
  'update the custom property with value supplied
  On Error Resume Next

  Dim icount 
  Dim iindex 

  For icount = 1 To objCustomProps.Count

    If objCustomProps.Item(icount).name = entryname Then
      iindex = icount
      Exit For
    Else
      iindex = 0
    End If

  Next


  If iindex = 0 Then 'no custom property found

   objCustomProps.Add entryname, entryvalue
   Wscript.Echo " Adding   [" & entryname & ":" & entryvalue & "]"
  Else
   objCustomProps.Item(iindex).Value = entryvalue
   Wscript.Echo " Changing [" & entryname & ":" & entryvalue & "]"

  End If
  On Error GoTo 0


End Sub
0 голосов
/ 05 апреля 2009

Не могли бы вы вместо этого использовать коллекцию CustomDocumentProperties для соответствующей книги Excel? Затем вы можете просто пройтись по коллекции и отредактировать свойство, если найдете его. Если его нет, вы можете создать свойство

...