|
|
|
VBA - Word/ Работа на ошибками.....
|
|||
|---|---|---|---|
|
#18+
Доброго времени суток... Сразу прошу прощения за то, что я уже наверное многим надоел с этим модулем... Наконец он у меня работает на 99% (1ый раз только не отрабатывает (на новой машине), а потом вроде нормально....) Суть проста - этакий Addobe Disciller... Програмка которая помогает удобно делать пдфки из ворда. Программа конвертатор - ghostscript... Так что все пдфки сделанные таким макаром обсалютно легальные (ghostscript - фриварная програмка) Вот полный код (хотя я его уже не 1 раз постил тут, но всетаки) Если не трудно просмотрите его и скажите, нет ли каких либо грубых ошибок.... Заранее спасибо. Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long Declare Function WaitForSingleObject Lib "kernel32" (ByVal hHandle As Long, ByVal dwMilliseconds As Long) As Long Public Declare Function CloseHandle Lib "kernel32" () Dim FSys As New FileSystemObject Sub Êîíâåðòàöèÿ() On Error GoTo ErrHendler Dim dName As String Dim iNameas As String Dim lRetVal As Long Dim fName As String Dim MyString As String Dim MyLen As String Static TCount As Variant Dim AnyString As String Dim MyStr As String Const iTitle = "Конвертация в .pdf формат" 'название окошка при сохранении файла If IsEmpty(TCount) Then TCount = 1 Else TCount = TCount + 1 End If dName = "Temp" & CStr(TCount) 'генерим название файла в окошке сохранения With Application.Dialogs(wdDialogFileSaveAs) .Name = dName .Format = wdNormal lRetVal = .Display iName = .Name End With If lRetVal <> -1 Then MsgBox prompt:="Преобразование отменено", Title:=iTitle Else MyString = "" + iName + "" 'далее идет отделение от имени и пути файла символов расширения... MyLen = Len(MyString) AnyString = "" + iName + "" MyStr = Left(AnyString, MyLen - 4) fName = MyStr dPrinter = ActivePrinter ActivePrinter = "Postscript" 'Запускаем принтер который печатает в файл, так как ghostscript делает pdf'ки только из ps'ок..... Application.PrintOut FileName:="", Range:=wdPrintAllDocument, Item:= _ wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _ Collate:=True, Background:=False, printtofile:=True, PrintZoomColumn:=0, _ PrintZoomRow:=0, PrintZoomPaperWidth:=0, PrintZoomPaperHeight:=0, _ OutputFileName:="" + fName + "" + ".ps" RetVal = Shell("C:\gs\gs8.14\bin\gswin32.exe -dNOPAUSE -sDEVICE=pdfwrite -sOutputFile=" + fName + ".pdf -dBATCH " + fName + ".ps") 'запускаем ghostscript process_handle = OpenProcess(SYNCHRONIZE, 0, RetVal) WaitForSingleObject process_handle, INFINITE 'ждем окончания работы ghostscript'а If process_handle <> 0 Then CloseHandle process_handle End If End If ActivePrinter = dPrinter 'ставим обратно принтер по умолчанию Kill "" + fName + "" + ".ps" 'убиваем не нужную ps'ку Exit Sub ErrHendler: MsgBox "Ошибка" End Sub В принципе все.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 04.11.2004, 23:06:18 |
|
||
|
VBA - Word/ Работа на ошибками.....
|
|||
|---|---|---|---|
|
#18+
Option Explicit где? Dim iNameas As String - нигде не используется Left заменить на Left$ все функции надо объявить как Private. FileSystemObject - есть не на всех компьютерах (ставится вместе с Outlook) MyString = "" + iName + "" - а зачем "" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 05.11.2004, 10:19:23 |
|
||
|
VBA - Word/ Работа на ошибками.....
|
|||
|---|---|---|---|
|
#18+
Option Explicit - а на сколько критично его отсутсвие? просто с ним вылетают всякая фигня типа : process_handle = OpenProcess(SYNCHRONIZE, 0, RetVal) выделяется SYNCHRONIZE Error: Varible not defined и как эту переменную обозначать? как string? Dim iNameas As String - спасибо, проглядел... Если не сложно обьясните в чем разница Declare Function , Public Declare Function, и Private Declare Function, так и не понял в чем их суть 8( FileSystemObject - на компы куда будет ставиться есть, так что в данном случае не критично, но все равно спасибо (не знал об этом) MyString = "" + iName + "" - а зачем Переделал, теперь все: MyString = "" + iName + "" MyLen = Len(MyString) AnyString = "" + iName + "" MyStr = Left(AnyString, MyLen - 4) fName = MyStr заменил на: fName = Left$(iName, Len(iName) - 4) Вопрос - в чем разница Left и Left$ - очень интересует так, как когда работаешь через командную строку винды, то подобные знаки при командах сильно влияют на коректную работу программы (в смысле ты хочешь одно, а она тебе совсем иное) и не во всех хелпах описывается смысл этих дополнительных знаков. Большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.11.2004, 15:11:08 |
|
||
|
|

start [/forum/topic.php?fid=60&fpage=350&tid=2168654]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
26ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
32ms |
get tp. blocked users: |
1ms |
| others: | 254ms |
| total: | 352ms |

| 0 / 0 |
