Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.02.2012, 19:59   #11
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию

Ламерский вопрос (но что же делать), как правильно подключить в VBA все функции из этой библиотеки:
GSDLL32.DLL 32-bit dynamic link library containing most of Ghostscript's functionality
Приложить не могу, она более 11Мб.
То есть вообще как правильно подключить dll.
Как я понимаю нужно что-то этого вида
Код:
Declare Function SetCurrentDirectory Lib "kernel32" Alias "SetCurrentDirectoryA" (ByVal lpPathName As String) As Long
Private Declare Function PathFileExists Lib "shlwapi.dll" Alias "PathFileExistsA" (ByVal pszPath As String) As Long
Но что делать нужно подключить все функции? Тем более когда нет подробностей.
С уважением, Алексей.

Последний раз редактировалось tae1980; 25.02.2012 в 20:06.
tae1980 вне форума Ответить с цитированием
Старый 25.02.2012, 20:29   #12
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Я пас - мало работал с внешними библиотеками. С Ghostscript вообще дела не имел.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 25.02.2012, 22:38   #13
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию

Есть такой код
Код:
        Sheets(word(Листы, n, "||")).PrintOut ActivePrinter:=ПринтерPDF
        Name "c:\gs\temp\!tmp.pdf" As "c:\gs\temp\Лист" & n & ".pdf"
Иногда при выполнение второй строке вылетает ошибка "File not found". Причина понятно, первая строка не успела отработать.
Вопрос: как дождаться когда первая строка отработает? Простейший вариант - пауза, но я считаю это неправильно, так как не известно точное время окончания работы первой строки.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 25.02.2012, 22:46   #14
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Поставьте в цикл проверку наличия этого файла.
И DoEvents вероятно в цикл добавьте - чтоб для печати ресурсы были.
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 25.02.2012 в 22:50.
Hugo121 вне форума Ответить с цитированием
Старый 25.02.2012, 23:02   #15
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию

Теперь стала вылетать ошибка "75 path/file access error" ))
Если я правильно все понимаю из-за того, что файл уже есть, но еще занят виртуальным принтером.
Как проверить, отсутствие защиты от записи на файле?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 25.02.2012, 23:07   #16
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Не знаю... Может быть пробовать открыть как текст на чтение, и если нет ошибки, то сразу закрыть и переименовывать?
Или просто сразу пытаться в цикле переименовывать, пока получится? (т.е. не будет ошибки)
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 25.02.2012, 23:13   #17
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Не знаю... Может быть пробовать открыть как текст на чтение, и если нет ошибки, то сразу закрыть и переименовывать?
Или просто сразу пытаться в цикле переименовывать, пока получится? (т.е. не будет ошибки)
Не получается...
Нашел способ: (GetAttr("c:\gs\temp\!tmp.pdf") And vbReadOnly) = 0
Придется крутить два цикла подряд.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 25.02.2012, 23:27   #18
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию

Цитата:
Сообщение от tae1980 Посмотреть сообщение
Нашел способ: (GetAttr("c:\gs\temp\!tmp.pdf") And vbReadOnly) = 0
Что-то он не очень работает. :(( GetAttr упорно возвращает 32, и ни чего кроме этой цифры. Что бы я не делал ошибка 75 все равно вылетает. Жмешь "продолжить" все работает.
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 25.02.2012, 23:43   #19
tae1980
Форумчанин
 
Регистрация: 02.02.2009
Сообщений: 844
По умолчанию

Еще один вопрос: как удалить все файлы (или по маске) в директории?
С уважением, Алексей.
tae1980 вне форума Ответить с цитированием
Старый 26.02.2012, 00:03   #20
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,170
По умолчанию

Не знаю - может быть неоптимально, может лучше сразу всю папку удалить, но с маской можно типа этого (скрипт vbs):
Код:
'Удаление файлов XLS если они старше 10 дней 
Dim FSO
Dim TheFolder, TheFiles, AFile

Set FSO = CreateObject("Scripting.FileSystemObject")
Set TheFolder = FSO.GetFolder("C:\Temp\") 'Каталог, откуда удалять
Set TheFiles = TheFolder.Files

For Each AFile In TheFiles
    If UCase(FSO.GetExtensionName(AFile.Path)) = "XLS" and _ 
        DateDiff("d", AFile.DateLastModified, Date) > 10  Then
        AFile.Delete
    End If
Next
А так всю папку с подпапками:
Код:
Dim fso, oFolder

Set fso = CreateObject("Scripting.FileSystemObject") 
Set oFolder = fso.GetFolder("c:\Temp\ttt\") 

fso.DeleteFolder oFolder, true
или чуть покороче:
Код:
Dim fso
Set fso = CreateObject("Scripting.FileSystemObject") 

fso.DeleteFolder fso.GetFolder("c:\Temp\ttt\"), true
webmoney: E265281470651 Z422237915069 R418926282008

Последний раз редактировалось Hugo121; 26.02.2012 в 00:15.
Hugo121 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
PDF двухсторонняя печать VladimirVB Microsoft Office Word 3 23.11.2010 12:23
печать листов excel ара Помощь студентам 10 07.04.2010 10:12
печать на PDF принтере Frost.sapr Мультимедиа в Delphi 1 12.10.2008 23:17
печать нескольких листов checkbox Microsoft Office Excel 2 16.01.2008 00:50