как программно распечатать файл?

Программирование на Visual Basic for Applications
milla
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 17.04.2012 (Вт) 15:26

как программно распечатать файл?

Сообщение milla » 14.05.2012 (Пн) 15:51

Добрый день! Делаю программу по преобразованию данных из некоторого Excel-файла в файл *.apl(открывается через Блокнот) на VBA. Необходимо после преобразования распечатать на принтере этот выходной файл apl. Подскажите пожалуйста, как это можно сделать? Нашла вариант через ShellExecute (shell32.dll), но Win7 x-64 ругается, говорит надо адаптировать код для 64-битной системы. вот код:

Код: Выделить всё
Private Declare Function ShellExecute _
        Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal hWnd As Long, _
        ByVal lpOperation As String, _
        ByVal lpFile As String, _
        ByVal lpParameters As String, _
        ByVal lpDirectory As String, _
        ByVal nShowCmd As Long) As Long

Private Sub WinAPI_PrintTextFile()
    ShellExecute 0&, "Print", NameAPLFile, vbNullString, vbNullString, 0&
   
End Sub

Template
Обычный пользователь
Обычный пользователь
 
Сообщения: 73
Зарегистрирован: 09.09.2006 (Сб) 18:03

Re: как программно распечатать файл?

Сообщение Template » 14.05.2012 (Пн) 22:01

Код: Выделить всё
Private Declare PtrSafe Function ShellExecute _
        Lib "shell32.dll" Alias "ShellExecuteA" ( _
        ByVal hwnd As LongPtr, _
        ByVal lpOperation As String, _
        ByVal lpFile As String, _
        ByVal lpParameters As String, _
        ByVal lpDirectory As String, _
        ByVal nShowCmd As Long) As LongPtr

milla
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 17.04.2012 (Вт) 15:26

Re: как программно распечатать файл?

Сообщение milla » 15.05.2012 (Вт) 7:41

Спасибо преогромное!!!!

milla
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 17.04.2012 (Вт) 15:26

Re: как программно распечатать файл?

Сообщение milla » 15.05.2012 (Вт) 15:50

Возник еще такой вопрос: а как вызвать диалоговое окно печати - если, например, нужно выбрать принтер из нескольких?

Template
Обычный пользователь
Обычный пользователь
 
Сообщения: 73
Зарегистрирован: 09.09.2006 (Сб) 18:03

Re: как программно распечатать файл?

Сообщение Template » 15.05.2012 (Вт) 18:07

Код: Выделить всё
Application.Dialogs(xlDialogPrint).Show

milla
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 17.04.2012 (Вт) 15:26

Re: как программно распечатать файл?

Сообщение milla » 15.05.2012 (Вт) 21:32

это я сообразила) но это для печати данных из excel... а чтобы распечатать мой apl(=txt)? стандартное диалоговое окно печати для Windows можно вызвать?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: как программно распечатать файл?

Сообщение ger_kar » 17.05.2012 (Чт) 10:37

Можно, с помощью WinApi функций библиотеки comdlg32.dll, например
Код: Выделить всё
Private Type PRINTDLG
   lStructSize As Long
   hwndOwner As Long
   hDevMode As Long
   hDevNames As Long
   hdc As Long
   flags As Long
   nFromPage As Integer
   nToPage As Integer
   nMinPage As Integer
   nMaxPage As Integer
   nCopies As Integer
   hInstance As Long
   lCustData As Long
   lpfnPrintHook As Long
   lpfnSetupHook As Long
   lpPrintTemplateName As String
   lpSetupTemplateName As String
   hPrintTemplate As Long
   hSetupTemplate As Long
End Type

Declare Function PrintDlg Lib "comdlg32.dll" Alias "PrintDlgA" (ByRef pPrintdlg As PRINTDLG) As Long


Можешь почитать ЭТУ ТЕМУ
Бороться и искать, найти и перепрятать

milla
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 17.04.2012 (Вт) 15:26

Re: как программно распечатать файл?

Сообщение milla » 17.05.2012 (Чт) 10:57

ок, спасибо!

Qwertiy
Доктор VB наук
Доктор VB наук
 
Сообщения: 2753
Зарегистрирован: 26.06.2011 (Вс) 21:26

Сообщение Qwertiy » 17.05.2012 (Чт) 14:48

Для информации:
Код: Выделить всё
%SystemRoot%\system32\NOTEPAD.EXE /p %1

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: как программно распечатать файл?

Сообщение ger_kar » 17.05.2012 (Чт) 14:58

И что диалог откроется? Он же вроде просто сразу на печать отправляет без настроек.
Бороться и искать, найти и перепрятать

milla
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 17.04.2012 (Вт) 15:26

Re: как программно распечатать файл?

Сообщение milla » 19.05.2012 (Сб) 7:45

Обошлась без диалога, только вот проблема такая - SellExecute не хочет печатать APL в чистом виде - говорит, что не может найти подходящую программу для его открытия. Если файл переименовать в txt то все работает, но потом мне надо переименовать его обратно в apl. Как дождаться окончания печати(=запуска ShellExecute)? Или назначить ShellExecute программу для открытия файла?

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: как программно распечатать файл?

Сообщение ger_kar » 19.05.2012 (Сб) 8:03

Можно же просто сделать например так:
Shell ("NOTEPAD.EXE /p D:\Мои документы\Рабочий стол\Log2.apl")
Бороться и искать, найти и перепрятать

milla
Начинающий
Начинающий
 
Сообщения: 20
Зарегистрирован: 17.04.2012 (Вт) 15:26

Re: как программно распечатать файл?

Сообщение milla » 19.05.2012 (Сб) 9:23

ger_kar, спасибо еще раз, это именно то, что нужно! и работает так, как нужно!
Последний раз редактировалось milla 19.05.2012 (Сб) 11:39, всего редактировалось 1 раз.

ger_kar
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1957
Зарегистрирован: 19.05.2011 (Чт) 19:23
Откуда: Кыргызстан, Иссык-Куль, г. Каракол

Re: как программно распечатать файл?

Сообщение ger_kar » 19.05.2012 (Сб) 9:26

Ну практически то же самое советовал Qwertiy постом повыше, а это практически тоже самое, только под несколько другим углом :) .
Бороться и искать, найти и перепрятать


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 2

    TopList