Невозможно создать объект OLE (DYMO SDK в VBA для Outlook 2010)

Я новичок в VBA, но я пытаюсь заставить DYMO LabelWriter работать в моем приложении VBA для Outlook 2010.

Я нашел различные образцы кода, но ни один из них не работает. Все они возвращаются с одной и той же ошибкой:

"Невозможно создать OLE-объекты"

Надеюсь, это вызвано простой ошибкой из-за того, что я не привык работать с VBA.

Я включил каждую ссылку в редакторе VBA, у которой есть что-то с «DYMO» в названии.

Вот пример кода:

Sub PrintLabels()
'Rembo wrote this routine - http://scriptorium.serve-it.nl
'This routine prints Excel data on sticker by using a template and the Dymo high level COM.
'It assumes you have a Dymo labelwriter printer and you have created a label that will
'serve as a template. On the label are two'text objects named OText1 and OText2.
'As a data source we assume text in cells B2:B5 and C2:C5 on your the first worksheet but
'obviously you can use any data source you like.

    Dim myDymo As Object
    Dim myLabel As Object
    Dim sPrinters As String
    Dim arrPrinters() As String
    Dim i As Long, i2 As Long, iStart As Long

    On Error Resume Next
    Set myDymo = CreateObject("Dymo.DymoAddIn")
    Set myLabel = CreateObject("Dymo.DymoLabels")
    If (myDymo Is Nothing) Or (myLabel Is Nothing) Then
        MsgBox "Unable to create OLE objects"
        Exit Sub
    End If

    'Check forDymo printer(s)
    'If there is one proceed and store the printernames in a variable, else quit
    sPrinters = myDymo.GetDymoPrinters()
    If sPrinters = "" Then
        Exit Sub
    Else
        i2 = 0
        iStart = 1
        For i = 1 To Len(sPrinters)
            If Mid(sPrinters, i, 1) = "|" Then
                i2 = i2 + 1
                ReDim Preserve arrPrinters(i2 + 1)
                arrPrinters(i2) = Mid(sPrinters, iStart, i - iStart)
                iStart = i + 1
            End If
        Next i
    End If

    'Store the current default printer and select the Dymprinter of your choice
    sDefaultPrinter = Application.ActivePrinter
    With myDymo
        '0 is first Dymo printer, you could use the printername instead: SelectPrinter "YourPrintername"
        .SelectPrinter arrPrinters(0)
    End With

    'Open the label template
    myLabel = myDymo.Open("C:\SomeFolder\LabelName.LWL")

    For i = 3 To 5
        'Give text objects OText1 and OText2 on the label a value
        With myLabel
            .SetField "OText1", Worksheets(1).Range("B" & i).Value
            .SetField "OText2", Worksheets(1).Range("C" & i).Value
        End With

        'Print the label
        With myDymo
            .StartPrintJob  'Only used for Turbo 400 model and higher for print optimizing, you may omit it
            .Print 2, False ' Print 2 copies
            .EndPrintJob    'Only used for Turbo 400 model and higher for print optimizing, you may omit it
        End With
    Next i

    'Make sure the default printer is selected again
    Application.ActivePrinter = sDefaultPrinter

    'Clean up
    Set myLabel = Nothing
    Set myDymo = Nothing
End Sub

person Matt Immer    schedule 22.05.2011    source источник
comment
Кстати: у меня 64-разрядная версия Windows 7, и я установил последнюю версию программного обеспечения для этикеток DYMO.   -  person Matt Immer    schedule 22.05.2011
comment
И если я изменю код, который он показывает Err.Description при ошибке, все, что я получаю, это: ошибка автоматизации   -  person Matt Immer    schedule 22.05.2011
comment
Было бы полезно, если бы вы могли сказать нам, на какой строке программа умирает.   -  person Codo    schedule 22.05.2011
comment
О, конечно :) Строка 16 вызывает проблему   -  person Matt Immer    schedule 23.05.2011


Ответы (1)


Поскольку я не знаком с программным обеспечением DYMO, могу только догадываться, в чем проблема:

Предполагая, что DYMO SDK является внутрипроцессным компонентом COM (он поставляется в виде DLL, а не EXCE), он должен иметь ту же разрядность, что и основная программа (в вашем случае Outlook). Поэтому, если ваш Outlook является 64-разрядной версией, COM-DLL также должна быть 64-разрядной версией.

Другая потенциальная проблема может заключаться в том, что программное обеспечение установлено неправильно.

Кстати: вам не нужно ссылаться на какие-либо COM-компоненты из VBA, поскольку код использует позднее связывание (все переменные имеют тип Object). Такие ссылки лучше удалить.

person Codo    schedule 22.05.2011
comment
DYMO SDK предоставляет интерфейс COM ( sites.dymo.com/DeveloperProgram/Pages/LW_SDK_Windows .aspx ). Я предполагаю, что это может быть несовместимость с 64-разрядным программным обеспечением, но я попробовал код на 32-разрядной машине Windows Vista с 32-разрядной версией Outlook 2007. Возникает та же ошибка. Если я включаю On Error Resume Next, я получаю следующую ошибку: Ошибка выполнения 429 — компонент ActiveX не может создать объект - person Matt Immer; 22.05.2011
comment
Возможно, я добился некоторого прогресса здесь. Вот и попробовал добавить DLSSDKCOMLibrary.dll в компоненты в редакторе. DLL распознается правильно, без ошибок. Но когда я нажимаю «ОК» и снова открываю диспетчер компонентов, dll исчезает (даже не отменяется), и когда я запускаю код, я получаю другую ошибку: Ошибка времени выполнения -2147467261 (80004003) Ошибка автоматизации. - person Matt Immer; 22.05.2011