Как реализовать функциональность Zip в VBA? - PullRequest
0 голосов
/ 14 мая 2009

недавно я работал над приложением в vba, которое опирается на некоторые файлы, которые содержатся в файле .docm самого документа. Первоначально я использовал функциональность сжатой папки Windows XP, чтобы программно извлечь содержимое документа. Это было оптимальным решением, поскольку оно встроено во все Windows XP, на котором оно будет использоваться, и поэтому не требует установки. Однако я наткнулся на загвоздку: кажется, что после того, как я извлек документ несколько раз, он начинает выдавать ошибку, говоря: «Ошибка, этот файл уже существует». Первоначально я думал, что что-то сломал и копнул немного глубже, оказалось, что в моем коде не было ошибки, а скорее ошибка в сжатой папке.

Если вы получили ошибку «Файл уже существует» для определенного zip-файла в вашей системе, Сжатая папка больше не работает с ЛЮБЫМ файлом с тем же именем, если вы переименовали указанный файл, она снова начнет работать. Итак, вот мой вопрос: как я могу реализовать возможность zip в VBA без сжатых папок? Бонусный вопрос: Как я могу исправить сжатые папки?

Спасибо за ваше время.

-Seamus

Обновление: В настоящее время он работает с использованием сжатых папок, я работаю над ошибкой, переименовывая файл во что-то новое каждый раз, когда возникает ошибка. Это работает нормально, но я ищу скорее исправление, чем решение проблемы.

Ответы [ 3 ]

0 голосов
/ 15 мая 2009

Этот может вам помочь. Похоже, он использует объект файловой системы сценариев ...

0 голосов
/ 19 мая 2009

Похоже, что нет хорошего способа получить доступ к zip-функциям непосредственно в Windows. Кажется, что единственный хороший способ сделать это - использовать метод копирования в папку zip, указанный в других ответах. Что касается проблемы, с которой я столкнулся, я буду обходить ее каждый раз, используя новое имя файла.

0 голосов
/ 14 мая 2009

Может быть, идея для бонусного вопроса: нельзя ли переименовать файл 2 раза, прежде чем использовать его в приложении VBA? Сначала дайте ему временное имя, а затем переименуйте его обратно в исходное имя.

EDIT: Я просто догадываюсь здесь, но кажется, вряд ли решить эту проблему изнутри вашего приложения, а скорее исправить это как своего рода патч Windows. Это означает, что на каждом компьютере, на котором должно работать ваше приложение, должен быть установлен этот патч для правильной работы. И это не то, на что вы можете положиться. Поэтому я думаю, что вы должны придерживаться обходного пути.

...