Ветеран

Сообщения: 2728
Благодарности: 1697
|
Профиль
|
Отправить PM
| Цитировать
fawor1t,
При наличии отсутствия Вашей реакции на вопросы, в первом приближении вариант скрипта
Код: 
ExtIn = "xls" 'Расширение Excel-файла
RangeIn = "C4" 'Адрес клетки, где хранится имя текстового файла с паролем и именем файла для архивации
BoxIn = "Z:\Box_In" ' Папка с Excel-файлами
BoxTxt = "Z:\Box_In" ' Папка с текстовыми файлами в Windows кодировке 1251
BoxFrom = "Z:\Soft_In" ' Папка с файлами, которые надо упаковать
BoxArc = "Z:\Soft_Arc" ' Папка с упакованными файлами
TimeErr = 20 ' Время отображения сообщения об ошибке
Arc = """C:\Program Files\7-Zip\7zG.exe"" a -tzip -p"
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WShell = CreateObject("WScript.Shell")
On Error Resume Next
Set InBox = FSO.GetFolder(BoxIn)
If Err.Number <> 0 Then
LL = WShell.Popup("Папка" + vbCrLf + vbCrLf + BoxIn + vbCrLf + vbCrLf + "Код ошибки " + CStr(Err.Number) + vbCrLf + Err.Description, 0, "Открытие папки", 16)
On Error GoTo 0
Else
Set XL = CreateObject("Excel.Application")
' XL.Visible = True
XL.Visible = False
On Error GoTo 0
Set AllFiles = InBox.Files
For Each File In AllFiles
XlsName = BoxIn + "\" + File.Name
If LCase(FSO.GetExtensionName(XlsName)) = LCase(ExtIn) Then
Set XLbook = XL.Workbooks.Open(XlsName)
TxtName = BoxTxt + "\" + CStr(XL.Range(RangeIn).Value)
XLbook.Close
On Error Resume Next
Set iTxt = FSO.OpenTextFile(TxtName, 1)
If Err.Number <> 0 Then
LL = WShell.Popup(XlsName + vbCrLf + vbCrLf + "Файл" + vbCrLf + TxtName + vbCrLf + vbCrLf + "Код ошибки " + CStr(Err.Number) + vbCrLf + Err.Description, TimeErr, "Открытие файла", 48)
Else
Pass = Trim(iTxt.ReadLine)
If iTxt.AtEndOfLine Then
LL = WShell.Popup(XlsName + vbCrLf + vbCrLf + "В файле" + vbCrLf + TxtName + vbCrLf + vbCrLf + "Не хватает данных", TimeErr, "Ошибка", 48)
Else
ForArcFile = Trim(iTxt.ReadLine)
If FSO.FileExists(BoxFrom + "\" + ForArcFile) Then
LL = WShell.Run(Arc + Pass + " """ + BoxArc + "\" + ForArcFile + ".zip"" """ + BoxFrom + "\" + ForArcFile + """", 1, True)
Else
LL = WShell.Popup(XlsName + vbCrLf + TxtName + vbCrLf + vbCrLf + "Нет файла" + vbCrLf + BoxFrom + "\" + ForArcFile, TimeErr, "Ошибка", 48)
End If
End If
iTxt.Close
End If
On Error GoTo 0
End If
Next
XL.Quit
End If
|
-------
Даже самая сложная проблема обязательно имеет простое, лёгкое для понимания, неправильное решение. Каждое решение плодит новые проблемы.
Последний раз редактировалось megaloman, 12-07-2017 в 21:11.
Причина: Учёл замечание Iska+добавил проверку на существование файла для архивации
Отправлено: 17:48, 12-07-2017
| #3
|