powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA - Word/ Работа на ошибками.....
3 сообщений из 3, страница 1 из 1
VBA - Word/ Работа на ошибками.....
    #32769699
Gotar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток... Сразу прошу прощения за то, что я уже наверное многим надоел с этим модулем... Наконец он у меня работает на 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

В принципе все....
...
Рейтинг: 0 / 0
VBA - Word/ Работа на ошибками.....
    #32770029
marvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Option Explicit где?
Dim iNameas As String - нигде не используется
Left заменить на Left$
все функции надо объявить как Private.
FileSystemObject - есть не на всех компьютерах (ставится вместе с Outlook)
MyString = "" + iName + "" - а зачем ""
...
Рейтинг: 0 / 0
VBA - Word/ Работа на ошибками.....
    #32771991
Gotar
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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$ - очень интересует так, как когда работаешь через командную строку винды, то подобные знаки при командах сильно влияют на коректную работу программы (в смысле ты хочешь одно, а она тебе совсем иное) и не во всех хелпах описывается смысл этих дополнительных знаков.

Большое спасибо!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA - Word/ Работа на ошибками.....
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]