Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Показать сообщение отдельно

Ветеран


Contributor


Сообщения: 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