Rambler's Top100
Форум: MS ACCESSVBVBA MS OfficeMS SQL server
Новые сообщения: 0000

Форум: MS ACCESS

Вопросы связанные с MS ACCESS

Обновить визитку
Участники «Online»
Все участники

 
 

Доброго времени суток, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Подскажите
 
 автор: Seryoga204   (07.01.2009 в 17:27)   личное сообщение
 
 

По данной ссылке http://forum.script-coding.info/viewtopic.php?id=1384 нашел скрипт который перебирает документы в определенной папке и распечатывает Word документы. Данный скрипт работает только для конкретной папки, с файлами конкретного расширения. А как сделать чтобы печатались файлы со всеми расширениями (файлы с текстовой структурой, но имеют числовое расширение, состоящее из трех цифр:0000,0001,0002 и т.д.). Эти файлы лежат в папке c:\OTDEL\000,001,002 и т.д.\дата (пример 01012009,02012009 и т.д.)\**.000 и т.д. Так надо что бы тотал пускал на печать все файлы находящиеся во всех папках 000,001,002 и т.д. но за определенную дату: например за 04012009-(имя папки с файлами).
Вот структура папок /подкаталоги-номер отделения
[img]http://s59.radikal.ru/i163/0901/e0/fc8ce1fa2b5b.png[/img]
подкаталоги дата
[img]http://s59.radikal.ru/i164/0901/68/101a4fed6b37.png[/img]
В папках дата файлы для печати по одному отделению
[img]http://s51.radikal.ru/i131/0901/6c/40e1c9a691a0.png[/img]
по другому отделению
[img]http://s49.radikal.ru/i124/0901/a1/ad3a6f5f35d1.png[/img]
и т. д по все отделениям за определенную дату.
Помогите пожалуйста, заранее благодарен.

  Ответить  
 
 автор: час   (07.01.2009 в 19:27)   личное сообщение
 
 

Вы имеете ввиду вот этот код?


Const wdPromptToSaveChanges = -2
Const wdSaveChanges         = -1


Dim objWord, objDoc, objFS, objFolder, objItem

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder("c:\work\temp\") 'Папка, из которой производится печать
Set objWord = WScript.CreateObject("Word.Application")

    For Each objItem In objFolder.Files
        If StrComp(objFS.GetExtensionName(objItem.Name), "doc", vbTextCompare) = 0 Then
            With objWord
                Set objDoc = .Documents.Open(objItem.Path, False, True, False)
                objDoc.PrintOut False
                Set objDoc = Nothing
            End With
            
        End If
    Next
objWord.Quit
Set objWord = Nothing
WScript.Quit 0

  Ответить  
 
 автор: час   (07.01.2009 в 19:31)   личное сообщение
 
 


Эти файлы лежат в папке c:\OTDEL\000,001,002 и т.д.\дата (пример 01012009,02012009 и т.д.)\**.000 и т.д


Так как же всё таки, я не понял, название выглядит?
00101012009 , 00001012009 - так?

и ещё это wordovskiy документ или текстовый
изначалбно doc или txt или rtf или ..........

  Ответить  
 
 автор: Seryoga204   (07.01.2009 в 19:58)   личное сообщение
 
 

В папке OTDEL находится 20 папок с номером отделения, т.е. (0001,0002,0003 и. д 20 шт. В каждой из этих папок находятся папки с названием даты отчета (например в папке 0001 есть папки - 01012009,02012009,03012009, ит.д , т.е название папки это дата создание отчета) и уже в этих папках находятся файлы с расширением номера отеления ( например ****,0001,0002 и .тд) В определенный момент требуется распечатать все отчеты по всем отелениям за определеное число, а имено например за 02,01,2009 - это все файлы по адресам:
D:\OTDEL\0001\02012009\*****.0001
D:\OTDEL\0002\02012009\*****.0002
D:\OTDEL\0003\02012009\*****.0003
D:\OTDEL\0004\02012009\*****.0004
....
D:\OTDEL\0016\02012009\*****.0016
D:\OTDEL\0017\02012009\*****.0017
D:\OTDEL\0018\02012009\*****.0018
D:\OTDEL\0019\02012009\*****.0019
D:\OTDEL\0020\02012009\*****.0020
Если как в скрипте отдельно указать путь к отдной из папок D:\OTDEL\0001\02012009\*****.0001
и срасширение 0001, файлы с этой папки печатаются нормально.Но как сделать чтобы печатались сразу все файлы с папок 02012009, т.е. отчеты за оределенную дату.

  Ответить  
 
 автор: час   (07.01.2009 в 20:42)   личное сообщение
 
 

То есть нуна сформировать правильно строку, куда послать скрипт искать файлы.........

  Ответить  
 
 автор: час   (07.01.2009 в 20:48)   личное сообщение
 
 

вот вернёт нужное имя папки

Function Folder_NAME(My_Date) As String
Folder_NAME = Format(Day(My_Date), "00") &  Format(Month(My_Date), "00") &  Format(Yaer(My_Date), "0000") 
End Function
my_Patch = "D:\OTDEL\0016\" & Folder_NAME(дата из поля на форме)

Set objFolder = objFS.GetFolder(my_Patch)'Папка, из которой производится печать 

  Ответить  
 
 автор: Seryoga204   (07.01.2009 в 21:00)   личное сообщение
 
 

Спасибо за ответ, но что то не получается. Надо чтобы скрипт запускал на печать все файлы, со всех вложеных папок с именем например 02012009.

  Ответить  
 
 автор: час   (07.01.2009 в 21:03)   личное сообщение
 
 

ты свой код сюда положи чтоба видеть о чём мы реч ведём....
чё там написано и как у Вас???

  Ответить  
 
 автор: час   (07.01.2009 в 21:06)   личное сообщение
 
 

D:\OTDEL\0001
вот эту часть менять???

подойдёт
Dim Hirina as long
Dim Hirina_STR as string
и пока цикл продолжается
Hirina = Hirina +1
а потом преобразуй её
Hirina_STR = Format(Yaer(Hirina ), "0000")
в скрипт Hirinka_STR

my_Patch = "D:\OTDEL\" & Hirina_STR & "\" & Folder_NAME(дата из поля на форме)

Set objFolder = objFS.GetFolder(my_Patch)'Папка, из которой производится печать

  Ответить  
 
 автор: час   (07.01.2009 в 21:01)   личное сообщение
 
 

А для смены расширения заведи переменную
Dim Hirinka as long например
Dim Hirinka_STR as string
и пока цикл продолжается
Hirinka = Hirinka +1
а потом преобразуй её
Hirinka_STR = Format(Yaer(Hirinka ), "0000")

и вместо "doc" всавь в скрипт Hirinka_STR

If StrComp(objFS.GetExtensionName(objItem.Name), Hirinka_STR , vbTextCompare) = 0 Then

  Ответить  
 
 автор: Seryoga204   (07.01.2009 в 21:16)   личное сообщение
 
 


Код:
Option Explicit

Const wdDoNotSaveChanges    =  0
Const wdPromptToSaveChanges = -2
Const wdSaveChanges         = -1


Dim objWord, objDoc, objFS, objFolder, objItem

Set objFS = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFS.GetFolder("d:\OTDEL\0001\02012009") 'Папка, из которой производится печать
Set objWord = WScript.CreateObject("Word.Application")

    For Each objItem In objFolder.Files
        If StrComp(objFS.GetExtensionName(objItem.Name), "0001", vbTextCompare) = 0 Then
            With objWord
                Set objDoc = .Documents.Open(objItem.Path, False, True, False)
                objDoc.PrintOut False
                Set objDoc = Nothing
            End With
            
        End If
    Next
objWord.Quit
Set objWord = Nothing
WScript.Quit 0

Я в скриптах не силен. Скрипт такого вида печатае все файлы за 02,01,2009 по отделу 0001, как бы сделать чтобы печатались все отделы за это число, пожалуйста, уже третий день мучаюсь, можно на моем кодепоказать что изменить, заранее спасибо.

  Ответить  
 
 автор: час   (07.01.2009 в 21:22)   личное сообщение
 
 

прилепляем функцию


Option Explicit

Const wdDoNotSaveChanges    =  0 
Const wdPromptToSaveChanges = -2 
Const wdSaveChanges         = -1 

' переменные пишем
Dim Hirinka as long 
Dim Hirinka_STR as string
Dim Hirina as long 
Dim Hirina_STR as string
Dim my_Patch as string 
Dim objWord, objDoc, objFS, objFolder, objItem 
Dim F as long

Function Cikl()
for F=1 to 20' смотря сколько папок
 Hirina_STR = Format(Yaer(F), "0000") 
my_Patch = "D:\OTDEL\" & Hirina_STR & "\" & Folder_NAME(дата из поля на форме) 
call Printing 
next F
end Function 

Function Printing ()
Set objFS = CreateObject("Scripting.FileSystemObject") 
Set objFolder = objFS.GetFolder("d:\OTDEL\0001\02012009") 'Папка, из которой производится печать 
Set objWord = WScript.CreateObject("Word.Application") 

    For Each objItem In objFolder.Files 
        If StrComp(objFS.GetExtensionName(objItem.Name), "0001", vbTextCompare) = 0 Then 
            With objWord 
                Set objDoc = .Documents.Open(objItem.Path, False, True, False) 
                objDoc.PrintOut False 
                Set objDoc = Nothing 
            End With 
             
        End If 
    Next 
objWord.Quit 
Set objWord = Nothing 
WScript.Quit 0 
End Function 

Function Folder_NAME(My_Date) As String 
Folder_NAME = Format(Day(My_Date), "00") &  Format(Month(My_Date), "00") &  Format(Yaer(My_Date), "0000")  
End Function 

  Ответить  
 
 автор: Seryoga204   (07.01.2009 в 21:35)   личное сообщение
 
 

час-спасибо огромное что со мной мучаешся.
скрипт при запуске ругается на 3-8 строки -"предполагается наличие окончания инструкции"
и покажи пожалуйста на предыдущем примере как вставить в скрипт вот это

    
D:\OTDEL\0001
вот эту часть менять???

подойдёт
Dim Hirina as long 
Dim Hirina_STR as string
и пока цикл продолжается 
Hirina = Hirina +1
а потом преобразуй её
Hirina_STR = Format(Yaer(Hirina ), "0000") 
в скрипт Hirinka_STR

my_Patch = "D:\OTDEL\" & Hirina_STR & "\" & Folder_NAME(дата из поля на форме) 

Set objFolder = objFS.GetFolder(my_Patch)'Папка, из которой производится печать    
     Ответить     

      автор: час   (07.01.2009 в 21:01)   личное сообщение     
     
А для смены расширения заведи переменную
Dim Hirinka as long например
Dim Hirinka_STR as string
и пока цикл продолжается 
Hirinka = Hirinka +1
а потом преобразуй её
Hirinka_STR = Format(Yaer(Hirinka ), "0000") 

и вместо "doc" всавь в скрипт Hirinka_STR

If StrComp(objFS.GetExtensionName(objItem.Name), Hirinka_STR , vbTextCompare) = 0 Then

Спасибо

  Ответить  
 
 автор: час   (07.01.2009 в 21:36)   личное сообщение
 
 

погоди я ещё не дописал.....

  Ответить  
 
 автор: час   (07.01.2009 в 21:42)   личное сообщение
 
 

Да ... а ты подскажи какую ты библиотеку подключал, что бы скрипт пахал???

  Ответить  
 
 автор: Seryoga204   (07.01.2009 в 21:44)   личное сообщение
 
 

C:\WINDOWS\System32\WScript.exe

  Ответить  
 
 автор: час   (07.01.2009 в 21:49)   личное сообщение
 
 

Я щас примерчик набросаю - погоди.....

  Ответить  
 
 автор: час   (07.01.2009 в 22:03)   личное сообщение
13 Кб.
 
 

Посмотри

  Ответить  
 
 автор: час   (07.01.2009 в 22:04)   личное сообщение
 
 

Только дату там подходяшую на форме напиши.

  Ответить  
 
 автор: час   (07.01.2009 в 22:10)   личное сообщение
12 Кб.
 
 

Чета я поторопился
Вот это лучше ,но
как нам определить сколько папок, сколько документов????
есть что взять за критерий?
можно конечно попробовать вот так написать....For Hirinka = 1 To 500 - это для файлов

  Ответить  
 
 автор: Seryoga204   (07.01.2009 в 22:21)   личное сообщение
 
 

Папок 33 но они имеют не последовательные названия, а имено 0000,0001,0025,0027 ит д
Файлов будет максимум 100шт

  Ответить  
 
 автор: Seryoga204   (07.01.2009 в 22:19)   личное сообщение
 
 

выдает ошибку
Run-time error'76'
Path not found
ругается на строку
Set objFolder = objFS.GetFolder(my_Patch)

  Ответить  
 
 автор: час   (07.01.2009 в 22:21)   личное сообщение
12 Кб.
 
 

Значит путь не верен.
Я наверное не угадал названия папок
У меня работает - надо тока с пакою разобраться - с её именем

  Ответить  
 
 автор: час   (07.01.2009 в 22:23)   личное сообщение
 
 

D:\OTDEL\0001\07012009\07012009.0001

Вот так вот ???

  Ответить  
 
 автор: Seryoga204   (07.01.2009 в 22:27)   личное сообщение
 
 

Да, только имя файлов не всегда дата, оно произвольное, и сорри я ошибся расширение состоит из трех цифр.

  Ответить  
 
 автор: час   (07.01.2009 в 22:30)   личное сообщение
12 Кб.
 
 

Вот может так........

  Ответить  
 
 автор: час   (07.01.2009 в 22:33)   личное сообщение
12 Кб.
 
 

Вот на три буквы
Для нас главнее имя папки, чем файла

  Ответить  
 
 автор: Seryoga204   (07.01.2009 в 22:42)   личное сообщение
 
 

А у вас печатает ? а то уменя не происходит не ких действий .

  Ответить  
 
 автор: час   (07.01.2009 в 22:43)   личное сообщение
 
 

У меня накидывает в принтер кучу -
у меня просто нет принтера....
Запусти в отладчике чё там происходит....

  Ответить  
 
 автор: Seryoga204   (07.01.2009 в 22:55)   личное сообщение
 
 

Acces печатает первый файл и после подвисает

  Ответить  
 
 автор: час   (07.01.2009 в 22:58)   личное сообщение
 
 

Запусти в отладчике чё там происходит....
на какой строке задумчивость?
У меня, скатина, - бегает всё путём

=========================================

  Ответить  
 
 автор: час   (07.01.2009 в 23:06)   личное сообщение
13 Кб.
 
 

Вот тестик......

  Ответить  
 
 автор: Seryoga204   (07.01.2009 в 23:09)   личное сообщение
 
 

При оладке никаких ошибок не выскакивает

  Ответить  
 
 автор: час   (07.01.2009 в 23:14)   личное сообщение
 
 

Что за XP ...................................
А текстовые файлы - тяжёлые?????????77

  Ответить  
 
 автор: час   (07.01.2009 в 23:21)   личное сообщение
 
 

Надо поспать .............

  Ответить  
 
 автор: Seryoga204   (07.01.2009 в 23:22)   личное сообщение
 
 

Винда ХР сборка от филки, файлы легкие в основном одна страница текста, просто папок в реале 33, а надо наверное ставить от 0 до 110 -так как названия не попорядку и последнее отделение №110 + файлоф каждой папке 3. Может из за этого и подвисает?

  Ответить  
 
 автор: час   (07.01.2009 в 23:25)   личное сообщение
 
 

говоря Что за XP
Я имел ввиду что за ХРень

  Ответить  
 
 автор: час   (07.01.2009 в 23:28)   личное сообщение
 
 

Точно, 33*110=
пока все проверишь охр--еешь
Он не виснет он фигачит - видимо
Попробуй номера прпорядку поближе к 001 понапихать в папочку
и посмотри результат.............

  Ответить  
 
 автор: час   (07.01.2009 в 23:32)   личное сообщение
 
 

Тута надо ещё проверять есть ли такой файл и если нет то нефига искать, хотя это доп функция - опять тормоз.......................
И к тому же мы не знаем имя файлика

  Ответить  
 
 автор: Seryoga204   (07.01.2009 в 23:39)   личное сообщение
 
 

Точно лапатит все папки попорядку, вот поэтому и долго. Спасибо большое. А нельзя прописать не диапазон от 0 до 110, а имено номера отделений, чтобы все не лапатил.

  Ответить  
 
 автор: Seryoga204   (07.01.2009 в 23:54)   личное сообщение
 
 

Спасибо !!!

  Ответить  
 
 автор: Seryoga204   (08.01.2009 в 08:23)   личное сообщение
 
 

А можно в функции установить не с 0 до 110-количество папок, а перечислить конкретно номера отделений:000,001,0025,0027, и.т.д. и также количество файлов не от 0 до130,а тоже 000,001,025,027 что бы прога не лапатила все параметры.

  Ответить  
 
 автор: час   (08.01.2009 в 12:32)   личное сообщение
 
 

А ты знаешь какие номера нужны?

  Ответить  
 
 автор: Seryoga204   (08.01.2009 в 13:03)   личное сообщение
 
 

Привет!
да номера отделов 0000,0001,0025,0027,0054,0057,0058,0060,0061,0062,0064,0065,0071,0076,0077,0078,0079,0080,0083,0084,0085,0086,0088,0090,0091,0092,0094,0097,0098,0099,0100,0101,0102
и соответственно расширения файлов
000,001,025,027,054,057,058,060,061,062,064,065,071,076,077,078,079,080,083,084,085,086,088,090,091,092,094,097,098,099,100,101,102
И гдеб указать что текст в кодировке ASCII (DOS), а то некоторіе файлі печатаются не коректно иероглифами.

  Ответить  
 
 автор: час   (08.01.2009 в 13:19)   личное сообщение
22 Кб.
 
 

Тада вот посмотри:
Открываем таблицу Otdel и заполняем номера отделов, нажимаем крестик слева и вводим все номера файлов в этом отделе.

  Ответить  
 
 автор: час   (08.01.2009 в 16:10)   личное сообщение
 
 

Ну чё как результат?
И гдеб указать что текст в кодировке ASCII (DOS), а то некоторіе файлі печатаются не коректно иероглифами - видимо в самом документе.......

  Ответить  
 
 автор: час   (08.01.2009 в 16:13)   личное сообщение
 
 

Кстати забыл пердупредить, но думаю сам догодался - надо dao подключить.
C:\Program Files\Common Files\Microsoft Shared\DAO

  Ответить  
 
 автор: Seryoga204   (08.01.2009 в 16:22)   личное сообщение
 
 

Выдает ошибку Run-time error '94'
Invalid use of Nul
на эту строку H_STR = MyRst1!Numder_File
Посмотри пожалуйста еще, прикладываю директорию только с 15,01,2009 числом и настроеннйый под нее аксес - т.е. отделы и расширения

  Ответить  
 
 автор: час   (08.01.2009 в 16:24)   личное сообщение
 
 

Это значит в таблице имеется строка без данных - пустая срока - Null
Удали пустые строки из таблицы
или отдел с незаполненными данными о файлах

  Ответить  
 
 автор: час   (08.01.2009 в 16:27)   личное сообщение
 
 


Посмотри пожалуйста еще, прикладываю директорию только с 15,01,2009 числом и настроеннйый под нее аксес - т.е. отделы и расширения


простите, а это что значит???

  Ответить  
 
 автор: Seryoga204   (08.01.2009 в 16:39)   личное сообщение
24 Кб.
 
 

Вот посмотри вроде пустых строк нет.

  Ответить  
 
 автор: Seryoga204   (08.01.2009 в 16:44)   личное сообщение
 
 

Еще в некоторых отделах бывает что отчетов за определенную дату нет .Сейчас приложу еще и директорию.

  Ответить  
 
 автор: Seryoga204   (08.01.2009 в 16:59)   личное сообщение
11 Кб.
 
 

Вот моя директория с файлами

  Ответить  
 
 автор: час   (08.01.2009 в 16:56)   личное сообщение
 
 

Как же нет????

  Ответить  
 
 автор: час   (08.01.2009 в 16:57)   личное сообщение
4 Кб.
 
 

вот скрин

  Ответить  
 
 автор: час   (08.01.2009 в 17:28)   личное сообщение
 
 

Простите а это имя файла???
01152864.100

  Ответить  
 
 автор: час   (08.01.2009 в 17:32)   личное сообщение
22 Кб.
 
 

Вот посмотри

  Ответить  
 
 автор: Seryoga204   (08.01.2009 в 18:25)   личное сообщение
 
 

час
Спасибо огромное пашет НАУРА, на печать идут все файлы. Еще покавыряюсь, посмотрю как сделать чтобы файлы выводились с нормальным текстом - а то половина нормально, а половина иероглифы, хотя все файлы с досовским текстом ASCII(DOS)

  Ответить  
 
 автор: час   (08.01.2009 в 18:45)   личное сообщение
 
 

Уррраааааааааа!!!!!
..........пойду чайка попью

  Ответить  
 
 автор: час   (08.01.2009 в 18:47)   личное сообщение
 
 

Может там шрифт поменять???????7

  Ответить  
 
 автор: Seryoga204   (08.01.2009 в 22:50)   личное сообщение
 
 

час
Спасибо ! Спасибо! Спасибо!
Все пашет как часы. Проблему с кодировкой решил подстановкой Encoding:=866 в строку:
Set objDoc = .Documents.Open(objItem.Path, False, True, False, Encoding:=866)
И все файлы стали печататься на нормальном языке.

  Ответить  
 
 автор: час   (10.01.2009 в 16:49)   личное сообщение
 
 

  Ответить  
HiProg.com - Технологии программирования
Rambler's Top100 TopList