2016-05-06 2 views
2

Используя VB6 для автоматизации Excel, у меня есть этот код, который хорошо работал уже 5 лет. Он в основном выполняет итерации с помощью надстроек, и если он обнаруживает какой-то один, он выдает сообщение пользователю.Ошибка автоматизации Excel # 1004 Метод '~' объекта '~' не удалось

 Public xlapp As Excel.Application 
     Set xlapp = GetObject(, "Excel.Application") 

     Dim CurrAddin As Office.COMAddIn 

     For Each CurrAddin In xlApp.COMAddIns 
2   LogMe "==>COM Add-In: " & CurrAddin.Description 

      'detect the PowerPivot add-in 
3   If CurrAddin.Description = "PowerPivot for Excel" And CurrAddin.progID = "Microsoft.AnalysisServices.Modeler.FieldList" Then 
4    LogMe "==>COM Add-In 'PowerPivot for Excel is set to load=" & CurrAddin.Connect 

5    If CurrAddin.Connect = True Then 
6     MsgBox "The PowerPivot Add-in for Excel is installed and set to load.", vbExclamation 
       End If 
      End If 
9  Next CurrAddin 

Error in MyAddInEnumerator 
1004 
Method '~' of object '~' failed 
Line: 2 

После ввода в уловитель ошибок в этой процедуре отладки говорит, что это происходит на линии 2. Интерактивная отладка показывает, что это на самом деле в строке выше. CurrAddin, похоже, уже инициализирован, поэтому проблема связана с xlApp.COMAddIns.

У меня есть это приложение, работающее на многих машинах с той же версией 32-разрядного Excel 2010. Эти машины запускают Win7x86 и Win7x64, и все, кроме одного, работают нормально, без ошибок. Я просто не могу понять, почему эта одна машина бомбит при использовании объекта «COMAddIns».

+0

Ссылки содержатся в приложении VB6, которое затем скомпилировано в EXE. Все запускают приложение с сервера и таким образом касаются одного и того же. Если вы не имеете в виду что-то еще. – sinDizzy

+0

Я вижу. Проверьте это, возможно, это поможет: https://support.microsoft.com/en-us/kb/178510 – ib11

+0

Да, эта статья плюс около 10 других. Это не объясняет, почему он работает на 15 других машинах, имеющих одну и ту же версию Excel. Плюс я устанавливаю переменную xlapp только один раз как глобальную переменную, и все переменные кажутся полностью квалифицированными. Но позвольте мне снова размыть мой код. – sinDizzy

ответ

0

Попробуйте проверить объект перед доступом к ней:

For Each CurrAddin In xlApp.COMAddIns 
    'Add this line below and the End If 
    If Not IsNull(CurrAddin) Then 
     LogMe "==>COM Add-In: " & CurrAddin.Description 

     'detect the PowerPivot add-in 
     If CurrAddin.Description = "PowerPivot for Excel" And CurrAddin.progID = "Microsoft.AnalysisServices.Modeler.FieldList" Then 
      LogMe "==>COM Add-In 'PowerPivot for Excel is set to load=" & CurrAddin.Connect 

      If CurrAddin.Connect = True Then 
       MsgBox "The PowerPivot Add-in for Excel is installed and set to load.", vbExclamation 
      End If 
     End If 
    End If 
Next CurrAddin 

пустая ссылка или необъявленная объект является вероятной причиной 1004 ошибок, как и в некоторых других SO статей:

VBA Excel: Run-time error '1004' Method 'Range' of object'_Worksheet' faile

Broken Excel VBA Macro Run-time error '1004': Method 'Range' of object '_Global' failed

Error '1004' Method 'Range' of object'_Global failed

HTH. Вероятно, вы все равно обнаружите у вас do есть надстройка. В противном случае это, вероятно, проблема с повторной установкой, как здесь: http://www.xtremevbtalk.com/996711-post4.html.

+0

То же, что и выше. Это не описание, которое терпит неудачу, это вызов xlApp.COMAddIns. это озадачивает. – sinDizzy

+0

ОК. Я очищаю комментарии выше. Я попытаюсь переустановить. Очевидно, что некоторая библиотека отключена, у меня нет больше идеи проследить ее, и это лучшее предложение относительно этого кода ошибки в Интернете, кроме тестирования для нулевого объекта. Вы можете протестировать 'CurrAddin' для null:' If Not IsNull (CurrAddin) Then' Это сделает ваш тест, вероятно, все еще действительным, поскольку вы ищете конкретный. – ib11

+0

Если я избавлюсь от цикла и сделаю только один оператор xlApp.COMAddIns.Update, он не работает. Как-то COMAddIns недоступен на этой машине.Возможно, он отремонтирует его. – sinDizzy

Смежные вопросы