Новости:

Интересные и полезные статьи по работе с Excel и VBA
можно найти в разделе ХИТРОСТИ

Главное меню

Поиск по архивам arj - VBA

Автор red14_88, 06.02.2016, 14:55:53

« назад - далее »

red14_88

Всем доброго времени суток!
Прошу прощения, если ошибся разделом, но более подходящего не увидел.
Столкнулся я с такой задачей - надо мне внутри экселевского макроса сделать следующее:
-имеем строку
-имеем каталог с кучей архивов *.arj
Найти тот архив, в котором находится файл, содержащий в своем названии искомую строку.
Весь мозг сломал, прошу помощи. Всем заранее спасибо.

Дмитрий Щербаков(The_Prist)

Вообще не вижу иных путей, кроме как идти циклом по архивам, распаковывать во временную папку содержимое и искать там файлы с нужным текстом. Как работать с архивами из VBA: Архивация/Извлечение из архива через VBA
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

red14_88

А как же far ищет? Не распаковывает-же?

Дмитрий Щербаков(The_Prist)

Ну тогда через FAR и перебирайте. Просили как сделать на VBA - сказал. Не нравится - не делайте.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

red14_88

По указанной ссылке разархивирование идет сторонним приложением, а не кодом VB. Такое решение у меня уже есть.


Function FindInArj(ArcName As String, FindString As String) As String
   Dim WshExec, TextStream As Object
   Dim Res As String, SurString As String, WishString  As String
   Res = ""
   WishString = ""
   Set WshExec = CreateObject("WScript.Shell").Exec("C:\Program Files\7-zip\7z.exe l " & Chr(34) & ArcName & Chr(34))
   Set TextStream = WshExec.stdout
   
   Do While Not TextStream.AtEndOfStream
       
       SurString = TextStream.ReadLine()
       If InStr(SurString, FindString) > 1 Then
           WishString = SurString
           Exit Do
       End If
   Loop
   If WishString <> "" Then
       'заранее знаю длину искомого файла, потому и возвращаю его имя таким образом
       Res = Right(WishString, 52)
   End If
   FindInArj = Res
End Function


Интересует решение задачи ТОЛЬКО на VB.

Дмитрий Щербаков(The_Prist)

Да? Тогда задача нерешаема. VBA не умеет работать с архивами(кроме .zip) напрямую.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Radimir

Цитата: The_Prist от 06.02.2016, 21:52:55
Да? Тогда задача нерешаема. VBA не умеет работать с архивами(кроме .zip) напрямую.
ВЫ имеете в виду работать с zip файлами через какой-то объект системы или в VBA есть команды которые сами позволяют работать с архивами этого формата?

Дмитрий Щербаков(The_Prist)

Вы по ссылке-то читали текст? :) Пройдите, не ленитесь - там есть коды, которые архивируют и проводят разархивацию архивов zip самим VBA, без сторонних программ.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...

Яндекс.Метрика Рейтинг@Mail.ru