Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Программирование, связанное с MS Office > [Перенесено из VB6/MS Access]Параллельные потоки на VBA


Автор: logvin 16.2.2011, 14:38
Сразу скажу, что новичок, сильно не пинайте.

Есть задачка в MS Project (это офисный пакет для планирования) применить определенный фильтр и отправить файл на печать в виртуальный принтер.

При отправке на печать в виртуальный принтер от программки "do PDF" выскакивает окошко с выбором пути для сохранения файла.

вот мой код 
Код

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowText Lib "user32" Alias "SetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String) As Long

Sub КБНИР_Общий()

FilterEdit Name:="Общий план КБ НИР", TaskFilter:=True, Create:=True, OverwriteExisting:=True, FieldName:="Названия ресурсов", Test:="содержит", Value:="КБ НИР", ShowInMenu:=False, ShowSummaryTasks:=True
FilterEdit Name:="Общий план КБ НИР", TaskFilter:=True, FieldName:="", NewFieldName:="% завершения", Test:="меньше", Value:="100", Operation:="И", ShowSummaryTasks:=True
FilterEdit Name:="Общий план КБ НИР", TaskFilter:=True, FieldName:="", NewFieldName:="Название", Test:="не содержит", Value:="Согласование номенклатуры", Operation:="И", ShowSummaryTasks:=True

FilterApply "Общий план КБ НИР"

FilePageSetupPage Portrait:=False
FilePageSetupMargins Top:=0.5, Bottom:=0.5, Left:=0.5, Right:=0.5
FilePageSetupPage PercentScale:=95
FilePrintSetup "DoPdf v5"
FilePrint , , , , , , , , False, , False

Dim hWndParent As Long
Dim hWndChild As Long
hWndParent = FindWindowEx(0, 0, "JWinproj-WhimperMainClass", 0)
If (hWndParent = Null) Then
hWndChild = FindWindowEx(hWndParent, Null, "EDIT", Null)
ElseIf (hWndChild = Null) Then
SetWindowText hWndChild, "текст, который надо вставить"
End If

End Sub



на функции "FilePrint , , , , , , , , False, , False" появляется окно, и следующий код


Код

Dim hWndParent As Long
Dim hWndChild As Long
hWndParent = FindWindowEx(0, 0, "JWinproj-WhimperMainClass", 0)
If (hWndParent = Null) Then
hWndChild = FindWindowEx(hWndParent, Null, "EDIT", Null)
ElseIf (hWndChild = Null) Then
SetWindowText hWndChild, "текст, который надо вставить"
End If

не выполняется, ждет закрытия окна.

Так вот. На сколько я понял, данный код нужно пускать в параллельном потоке до вызова функции "FilePrint , , , , , , , , False, , False".
Тогда он отработает, нажмет на "ок" (сейчас пока нажатия в коде нет), окно закроется и основной код продолжит выполняться.

Подскажите пожалуйста, как это можно сделать!
Заранее спасибо!

Автор: Akina 16.2.2011, 15:05
FilePrint не является встроенной (штатной) процедурой VB6. Укажите, из какой библиотеки она берётся... а лучше сразу попробуйте почитать доку по параметрам, может, там есть что-то, позволяющее выполнять эту процедуру асинхронно.

Автор: logvin 16.2.2011, 15:16
да ничего особенного в ней не вижу 
http://msdn.microsoft.com/ru-ru/library/ff862889%28en-us%29.aspx

Автор: -Mikle- 19.2.2011, 14:52
А не судьба вызвать FilePrint в самом конце КБНИР_Общий ?

Автор: Akina 19.2.2011, 17:36
logvin, Вы на VB6 пишете или на VBA?

Автор: logvin 21.2.2011, 08:32
Цитата
Вы на VB6 пишете или на VBA?

на VBA 
Цитата
А не судьба вызвать FilePrint в самом конце КБНИР_Общий ?


не важно где поставить. все равно при отправке на печать появится окно, и VBA будет ждать его закрытия.

Автор: Akina 21.2.2011, 10:11
Цитата(logvin @  21.2.2011,  09:32 Найти цитируемый пост)
на VBA 

А раздел выбрать нормально не судьба?
Тема перенесена.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)