Добрый день!
Подскажите дилетанту. Есть файл на компе. Есть установленный на компе архиватор WinZip. Требуется на VBA написать команду, чтобы заархивировать этот файл WinZip - ом. Как это сделать?
dim FilePath as string
dim WinZip as string
const AddTo as string = " /a "
Filepath= "c:\temp\file.doc"
winzip = "c:\progra~1\winzip\winzip.exe"
Shell WinZip & AddTo & FilePath, vbHide
Private Sub Кнопка30_Click()
Dim ПутьКФайлу As String
Dim ПутьКФинРару As String
Const КонсольныеКоманды As String = " a "
ПутьКФайлу = CurrentProject.Path & "\БД.mdb"
ПутьКФинРару = "C:\Program Files\WinRAR\winrar.exe"
Shell ПутьКФинРару & КонсольныеКоманды & ПутьКФайлу, vbHide
End Sub
Private Sub Кнопка30_Click()
Dim ПутьКФайлу As String
Dim ПутьКФинРару As String
Const КонсольныеКоманды As String = " a База "
ПутьКФайлу = Chr$(34) & CurrentProject.Path & "\БД.mdb" & Chr$(34)
ПутьКФинРару = Chr$(34) & "C:\Program Files\WinRAR\winrar.exe" & Chr$(34)
Shell ПутьКФинРару & КонсольныеКоманды & ПутьКФайлу, vbHide
End Sub
Gurren писал(а):База - а это что? Тоже команда такая?
ger_kar писал(а):а) Добавить все файлы *.hlp из текущей папки в архив help.rar :
WinRAR a help *.hlp
Gurren писал(а)::) спасибо, но мне нужно архивацию сделать программным способом...
Public Sub CreateZIP(ByVal ZIPFileName As String)
Dim ff As Long
Dim ShellApp As Object
ff = FreeFile
Set ShellApp = CreateObject("Shell.Application")
Open ZIPFileName For Output As #ff
Print #ff, Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, vbNullChar);
Close #ff
End Sub
Gurren писал(а):CurrentProject.Path как с именем архива совместить? транскрипция не правильная у меня получается(Прописать то путь не проблема, а вот как с CurrentProject.Path совместить, что бы winrar например сохранял - CurrentProject.Path & "\АрхивнаяКопия\База"
ПутьКАрхиву = Chr$(34) & CurrentProject.Path & "\АрхивнаяКопия\База.rar" & Chr$(34)
Private Sub Кнопка30_Click()
Dim ПутьКФайлу As String
Dim ПутьКФинРару As String
Const КонсольныеКоманды As String = "a -ep -ag_YYYY-MM-DD-[NN]"
ПутьКФайлу = Chr$(34) & CurrentProject.Path & "\БД.mdb" & Chr$(34)
ПутьКФинРару = Chr$(34) & "C:\Program Files\WinRAR\winrar.exe" & Chr$(34)
ПутьКАрхиву = Chr$(34) & CurrentProject.Path & "\АрхивнаяКопия\База.rar" & Chr$(34)
Shell ПутьКФинРару & " " & КонсольныеКоманды & " " & ПутьКАрхиву & " " & ПутьКФайлу, vbHide
End Sub
Diamock писал(а):Процедура создания ZIP-архива:
- Код: Выделить всё
Public Sub CreateZIP(ByVal ZIPFileName As String)
Dim ff As Long
Dim ShellApp As Object
ff = FreeFile
Set ShellApp = CreateObject("Shell.Application")
Open ZIPFileName For Output As #ff
Print #ff, Chr(80) & Chr(75) & Chr(5) & Chr(6) & String(18, vbNullChar);
Close #ff
End Sub
ger_kar писал(а):А смысл создавать ссылку на объект "Set ShellApp = CreateObject("Shell.Application")" и нигде по ходу процедуры его не использовать ?
Option Explicit
'########################################################################################
Private Function FileExist(FileName As String) As Boolean
'########################################################################################
'# Функция проверки существования файла
'########################################################################################
'# Параметры функции:
'########################################################################################
'# FileName - [Обязательный]
'# - Тип String
'# - Имя проверяемого файла. Если путь к файлу не указан, проверяется
'# - файл в текущем каталоге текущего диска
'########################################################################################
'# Возвращаемое значение
'# - Тип Boolean
'# - Если файл существует, возвращает True
'# - Если файл не существует, возвращает False
'# - В случае ошибки, возвращает False
'########################################################################################
On Error GoTo ErrFileExist '# Включаем обработчик ошибок
If Dir$(FileName) = vbNullString Then '# Проверяем файл
FileExist = False '# Файл не существует, FileExist = False
Else
FileExist = True '# Файл существует, FileExist = True
End If
Exit Function '# Выход из процедуры
ErrFileExist: '# Обработка ошибок
FileExist = False '# Файл не существует, FileExist = False
End Function
'########################################################################################
'########################################################################################
Public Sub CreateZIP(ZIPFileName As String, Optional Overwrite As Boolean = True)
'########################################################################################
'# Процедура создания ZIP архива
'########################################################################################
'# Параметры процедуры:
'########################################################################################
'# ZIPFileName - [Обязательный]
'# - Тип String
'# - Полный путь к архиву
'########################################################################################
'# Overwrite - [Необязательный]
'# - Тип Boolean
'# - Указание на возможность записи на место существующего файла.
'# - В случае, когда значение равно True, такая запись разрешается;
'# - в противном случае значение равно False.
'# - Если параметр опущен, запись поверх существующего файла разрешена
'########################################################################################
'# Объявление переменных процедуры
Dim ff As Long '# Переменная на доступ к свободному каналу
Dim FE As Boolean '# Переменная для хранения валидности файла
'# Инициализация переменных
ff = FreeFile '# Получаем свободный канал
FE = FileExist(ZIPFileName) '# Проверка валидности [ZIPFileName]
'# Обработка параметра [Overwrite]
Select Case Overwrite '# Провека параметра [Overwrite]
Case True '# Перезапись разрешена
If FE = True Then '# ZIP архив существует
Kill ZIPFileName '# Удаляем ZIP архив
End If
Case False '# Перезапись запрещена
If FE = True Then '# ZIP архив существует
MsgBox "ZIP архив " & _
vbCrLf & ZIPFileName & _
vbCrLf & "существует.", _
vbInformation, App.Title '# Выводим информационное сообщение
Exit Sub '# Выходим из процедуры
End If
End Select '# Окончание проверки [Overwrite]
'# Создание ZIP файла
Open ZIPFileName For Output As #ff '# Открываем файл для записи
Print #ff, Chr(80) & Chr(75) & _
Chr(5) & Chr(6) & String(18, vbNullChar); '# Создаём ZIP файл
'####################################################################
'# ВНИАНИЕ!!! #
'# Точка с запятой в конце строки обязательна, чтобы оператор Print #
'# не добавлял в файл символ переноса vbCrLf #
'####################################################################
Close #ff '# Закрываем канал
End Sub
'########################################################################################
'########################################################################################
Public Sub AddFFFromZIP(ByVal ZIPFileName As String, ByVal AddFFName As String)
'########################################################################################
'# Примечание к процедуре!
'########################################################################################
'# Изначально, планировалось создать две процедуры. Добавление файла в ZIP архив и добав-
'# ление папки в ZIP архив. Но структура кода в теле обеих процедур была одинакова, поэ-
'# тому я решил использовать одну процедуру для добавления фалов и папок.
'########################################################################################
'# Параметры процедуры:
'########################################################################################
'# ZIPFileName - [Обязательный]
'# - Тип String
'# - Полный путь к архиву
'########################################################################################
'# AddFFName - [Обязательный]
'# - Тип String
'# - Полный путь к добавляемому файлу или папке
'########################################################################################
Dim ShellApp As Object '# Переменная для инициализации [Shell.Application]
Dim ObjFolder As Object '# Переменная для папки копирования
Set ShellApp = CreateObject("Shell.Application") '# Инициализация [Shell.Application]
Set ObjFolder = ShellApp.NameSpace((ZIPFileName))
ObjFolder.CopyHere (AddFFName), 4
'# Добавляем файл (папку) в ZIP архив
Set ShellApp = Nothing '# Освобождаем переменную
Set ObjFolder = Nothing '# Освобождаем переменную
End Sub
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 70