двусторонняя печать Doc файла из Lotus'a

Тема в разделе "Lotus - Программирование", создана пользователем Dikobraz Grey, 30 июл 2009.

Статус темы:
Закрыта.
  1. Dikobraz Grey

    Dikobraz Grey Гость

    Всем доброго времени суток.
    Столкнулся с проблемой при использовании OLE Word'a 2003.

    Пытаюсь запустить из Lotus'a ручную двустороннюю печать файла Word'a:

    [codebox]
    Sub Click(Source As Button)
    On Error Goto er1

    Dim wordObject As Variant
    Dim pvWordDocument As Variant
    Dim Background As Variant
    Dim Range As Variant
    Dim Copies As Variant
    Dim PageType As Variant
    Dim PrintToFile As Variant
    Dim Collate As Variant
    Dim ManualDuplexPrint As Variant

    Set wordObject=CreateObject("Word.Application")
    If Isobject(wordObject) Then
    wordObject.Visible=True
    Set pvWordDocument=wordObject.Documents.Open("D:\test2.doc")
    End If
    Background=True
    Range=Microsoft.Office.Interop.Word.WdPrintOutRange.wdPrintAllDocument
    Copies=1
    PageType=Microsoft.Office.Interop.Word.WdPrintOutPages.wdPrintAllPages
    PrintToFile=False
    Collate=False
    ManualDuplexPrint=True
    Call pvWordDocument.PrintOut(Background, Range, Copies,PageType, PrintToFile, Collate, ManualDuplexPrint)
    Exit Sub

    er1:

    Msgbox Error$ & Chr(10) & Getthreadinfo(1) & " (l." & Erl & ")"
    Resume WorkDone
    WorkDone:
    End Sub[/codebox]



    В приведенном коде получаю ошибку при запуске "Variant does not contain an object" при инициализации Range.

    При попытке передачи параметров Range и PageType просто числами:
    [codebox]

    Background=True
    Copies=1
    PrintToFile=False
    Collate=False
    ManualDuplexPrint=True
    Call pvWordDocument.PrintOut(Background, 0, Copies,0, PrintToFile, Collate, ManualDuplexPrint) [/codebox]

    код падает при вызове PrintOut с ошибкой "Automation object argument type mismatch". Причем похоже, падает на параметре PageType (второй ноль).

    Если же инициализировать Range и PageType по имени константы:

    [codebox] Background=True
    Range=wdPrintAllDocument
    Copies=1
    PageType=wdPrintAllPages
    PrintToFile=False
    Collate=False
    ManualDuplexPrint=True
    Call pvWordDocument.PrintOut(Background, Range, Copies,PageType, PrintToFile, Collate, ManualDuplexPrint) [/codebox]

    код валится опять же на PrintOut, c той же ошибкой "Automation object argument type mismatch"


    Может кто подскажет, как правильно передать параметры в функцию PrintOut?
    По идее все параметры этой функции по MSDN и прочим источникам имеют тип Object, но Lotus его не знает ;)
    Ошибка "Variant does not contain an object" при попытке инициализации констант через Microsoft.Office.Interop.Word вполне логична и ожидаема, но я уже не знаю как правильно достучаться до них. Почему то кажется , что проблема именно в Range и PrintOut.

    Заранее спасибо за помощь.
     
  2. amigolinx

    amigolinx Гость

    Была похожая трабла с вордовыми объектами. Точно сейчас уже не помню, кажись нада копать в сторону полной передачи параметров числами (я их наискивал в вордовском Object Browser'e - в редакторе VBA вызывается. там внизу в статус баре выдается инфа по численным соответствиям мемберов вордовых объектов):
    Код (Text):
    Call pvWordDocument.PrintOut(1, 0, 1, 0, 0, 0, 1)
    и я бы не юзал такую конструкцию, пробуй напрямую обращаться к ворду и его "детям":
    Код (Text):
    Set word = CreateObject("Word.Application")
    Call word.ActiveDocument.PrintOut(1, 0, 1, 0, 0, 0, 1)
    да и кстати еще замутка в том, чтобы передавать ворду все параметры его ф-ии - там где у него Optional (по мойму для этих целей Nothing отлично катит) - а в этой ф-ии они все такие *брал из 2007-го - может чуток отличаться* : PrintOut(Background, Append, Range, OutputFileName, From, To, Item, Copies, Pages, PageType, PrintToFile, Collate, FileName, ActivePrinterMacGX, ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, PrintZoomPaperWidth, PrintZoomPaperHeight). Те которые играют в твоем коде, пиши прям в числах, а которые не играют - подставь Nothing
     
  3. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    А если попробовать задекларировать
    Const wdPrintAllDocument = 0
    Const wdPrintAllDocument = 0

    Значения констант подсмотрены тут: http://objectmix.com/framework-interface-p...ibraries-3.html
     
  4. amigolinx

    amigolinx Гость

    "Урра! Заработало!" ©

    Вордовая ф-ия требует четкой последовательности параметров, то есть поскольку она объявлена как
    PrintOut(Background, Append, Range, OutputFileName, From, To, Item, Copies, Pages, PageType, PrintToFile, Collate,
    FileName, ActivePrinterMacGX, ManualDuplexPrint, PrintZoomColumn, PrintZoomRow, PrintZoomPaperWidth, PrintZoomPaperHeight)
    получается, что в первоначальном варианте в то время, как она хотела OutputFileName (строчечку то есть) мы ей отдавали Integer, вот она и матюгалась.
    А ее нужно покормить соответственно, благо можно не все параметры передавать, а до определенного нужного нам места - мне хватило духу добраться до Collate, дальше устал запятые считать ;) но принцип, думаю, понятен

    Код (Text):
    Sub Click(Source As Button)
    On Error Goto er1

    Dim wordObject As Variant
    Dim pvWordDocument As Variant

    Set wordObject=CreateObject("Word.Application")
    If Isobject(wordObject) Then
    wordObject.Visible=True
    Set pvWordDocument=wordObject.Documents.Open("D:\test2.doc")
    End If

    Call pvWordDocument.printout(, , 0, , , , 0, 1, , 0, , 1)  

    Exit Sub

    er1:

    Msgbox Error$ & Chr(10) & Getthreadinfo(1) & " (l." & Erl & ")"
    Resume WorkDone
    WorkDone:
    End Sub
     
  5. Dikobraz Grey

    Dikobraz Grey Гость

    Спасибо, amigolinx . Заработало :)
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей