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

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

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

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

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 21.03.2009, 11:58   #1
eda
Пользователь
 
Регистрация: 14.08.2008
Сообщений: 78
По умолчанию архивирование файлов через shell

Подскажите, пожалуйста, почему не работает следующий код:
Dim oFolder
Dim foldername
Dim oShell

Set oShell = CreateObject("Shell.Application")
Set oFolder = oShell.Namespace(oD & WIN_PATH_DLM)
If Not oFolder Is Nothing Then
'Create empty Zip File
NewZip (aN)
foldername = oFolder.Self.Path
If Right(foldername, 1) <> "\" Then
foldername = foldername & "\"
End If

'Copy the files to the compressed folder
oShell.Namespace(aN).CopyHere oShell.Namespacefoldername).item()
End If
eda вне форума
Старый 21.03.2009, 12:12   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Зачем что-то изобретать?

Воспользовавшись поиском по разделу с ключевым словом CopyHere,
находим пример работоспособного кода:

http://www.programmersforum.ru/showp...90&postcount=2
EducatedFool вне форума
Старый 21.03.2009, 12:27   #3
eda
Пользователь
 
Регистрация: 14.08.2008
Сообщений: 78
По умолчанию

я просто хочу знать, в чем ошибка...
eda вне форума
Старый 21.03.2009, 12:32   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

А что, так сложно сравнить свой код с кодом по моей ссылке?

Вы, кстати, не заметили, что VBA выделяет красным цветом строку
oShell.Namespace(aN).CopyHere oShell.Namespacefoldername).item()

Достаточно подумать пару секунд, чтобы понять, что в коде нехватает одной скобки:
oShell.Namespace(aN).CopyHere oShell.Namespace(foldername).Item()

Ну и, конечно, нет функции NewZip
Код:
Sub NewZip(sPath)
    If Len(Dir(sPath)) > 0 Then Kill sPath
    Open sPath For Output As #1
    Print #1, Chr$(80) & Chr$(75) & Chr$(5) & Chr$(6) & String(18, 0)
    Close #1
End Sub
Вы бы хоть написали, на какой строке кода вылетает ошибка...

Последний раз редактировалось EducatedFool; 21.03.2009 в 12:34.
EducatedFool вне форума
Старый 21.03.2009, 12:36   #5
eda
Пользователь
 
Регистрация: 14.08.2008
Сообщений: 78
По умолчанию

По поводу скобки - я описалась. Функция ZipName есть, такая же. Но проблема остается
eda вне форума
Старый 21.03.2009, 12:40   #6
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,858
По умолчанию

Цитата:
Функция ZipName есть, такая же
Надо приводить код полностью.
Там где-то ещё определены переменная oD и константа WIN_PATH_DLM

Если код большой, прикрепите файл с этим кодом.
За одним напишите, чего вы пытаетесь добиться при помощи этого кода.

И чем Вас не устраивает приведённая мной версия этого же кода?
(который совпадает с Вашим кодом на 90%)

Повторюсь: на какой строке кода вылетает ошибка?
EducatedFool вне форума
Старый 21.03.2009, 12:52   #7
eda
Пользователь
 
Регистрация: 14.08.2008
Сообщений: 78
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Надо приводить код полностью.
Там где-то ещё определены переменная oD и константа WIN_PATH_DLM
oD & WIN_PATH_DLM ="C:\DOCUME~1\LOCALS~1\Temp\2009.03 .21-12-49-07\"(это путь к папке, файлы из которой нужно заархивировать)

И чем Вас не устраивает приведённая мной версия этого же кода?
(который совпадает с Вашим кодом на 90%)
мне нужно исправить уже написанный код. Вообще, код, который я написала работает, если сделать замену:
Set oFolder = oApp.BrowseForFolder(0, "Select folder to Zip", 512).
Поэтому мне и важно понять, почему без выбора папки вручную возникает ошибка.

Повторюсь: на какой строке кода вылетает ошибка?
oShell.foldername(aN).CopyHere oShell.Namespace(foldername).Items
eda вне форума
Старый 21.03.2009, 14:20   #8
eda
Пользователь
 
Регистрация: 14.08.2008
Сообщений: 78
По умолчанию

Для тех, кто столкнется с такой же проблемой: код будет работать, если написать так:
oShell.Namespace("" & aN).CopyHere oShell.Namespace("" & foldername).Items

Последний раз редактировалось eda; 21.03.2009 в 14:22.
eda вне форума
Старый 14.07.2009, 09:46   #9
eda
Пользователь
 
Регистрация: 14.08.2008
Сообщений: 78
По умолчанию

Скажите, пожалуйста, как решить следующую задачу:
Есть список файлов с одним именем. Нужно заархивировать их вместе со структурой папок, в которых они хранятся, т.е. в архиве восоздать структуру папок для каждого файла, при этом в архив не должны попадать файлы, которых нет в списке, но есть в папках.
eda вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Архивирование файлов Altera Общие вопросы Delphi 1 08.06.2010 20:35
Связь с кучей dbf файлов (таблиц) через OLEDB через UNION ALL Sasha811 SQL, базы данных 0 01.01.2009 14:04
Открытие файлов через TreeView Xardas Общие вопросы Delphi 12 29.03.2008 11:30
архивирование das-xp Общие вопросы Delphi 5 26.06.2007 20:13
архивирование dron-s Общие вопросы Delphi 3 03.05.2007 11:56