Excel это не сложно
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
25.04.2024, 09:00:23

Войти
Хотите поблагодарить участника за дельный совет? Нажмите [Повысить]. Так вы заслуженно поднимите репутацию активному участнику.
33 243 Сообщений в 5 458 Тем от 6 763 Пользователей
Последний пользователь: tetrapack
*
Перейти на сайт Хитрости Надстройка MulTEx Обучающие тренинги Наша группа ВКонтакте
Правила форума Начало Помощь Поиск Календарь Войти Регистрация Выйти
+  Excel это не сложно
|-+  Основные форумы
| |-+  Вопросы по Excel и VBA
| | |-+  Редактирование xml в архиве через макрос vba
Страниц: [1]   Вниз
Печать
Автор Тема: Редактирование xml в архиве через макрос vba  (Прочитано 2655 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Valetnina
Постоялец
***

Репутация: +2/-0
Офлайн Офлайн

Сообщений: 153



Просмотр профиля WWW E-mail
« : 01.07.2020, 08:20:29 »

Здравствуйте.
Ищу способ средствами VBA вносить изменения в xml структуру файла  Excel.
Эта xml структура несет пользовательские настройки для ленты Excel. Сам файл Excel регулярно переименовывается (создаются нумерованные версии) и чтобы макросы, привязанные к кнопкам, продолжали работать,  для тега OnAction в xml нужно менять имя файла.
Смена имени файла происходит несколько раз в день, поэтому хочется делать это программно, а не вручную инструментами типа Ribbon XML Editor или Custom UI Editor.

Я заметила, что если файл Excel превратить в zip, то его xml часть представлена в файле по пути  «ПОЛНОЕ ИМЯ ФАЙЛА.zip\customUI\customUI14.xml». Исходя из этого, у меня сложился некий алгоритм редактирования этого xml :
1.       Заархивировать файл Excel в zip
Код: (vb)
Name File_Name As File_Name & ".zip"

2.       открыть в zip-е «подфайл»  «ПОЛНОЕ ИМЯ ФАЙЛА.zip\customUI\customUI14.xml» с возможностью редактирования,
3.       считать его содержимое (возможно через CreateObject("ADODB.Stream").LoadFromFile),
4.       внести изменения
5.       вернуть измененный customUI14.xml в архив.
6.       Преобразовать файл обратно в Excel
Код: (vb)
Name  File_Name & ".zip" As File_Name

 и изменения вступают в силу.

Шаги 2-4 пытаюсь делать как с обычным - НЕархивным - подфайлом, и пока не получается даже открыть его - ошибка 3002 , «невозможно открыть файл» :
   
Код: (vb)
With CreateObject("ADODB.Stream")    ' загружаем данные из файла  
        .Type = 2: .Charset = "utf-8": .Open 
        .LoadFromFile Folder$ & Filename$ 
        txt = .ReadText: .Close 
    End With

Вопрос для меня, возможно ли такое в принципе. В гугле нахожу только как архивировать/разархивировать макросом, как получить список путей до файлов в архиве, что не отвечает на мой вопрос.
В приложении простой файл Excel для проб, иксемелем создающий в ленте пользовательскую вкладку с кнопкой.
Буду благодарна за подсказки.
Записан
boa
Старожил
****

Репутация: +22/-0
Офлайн Офлайн

Сообщений: 252


Доброта спасет мир...


Просмотр профиля WWW
« Ответ #1 : 01.07.2020, 09:30:08 »

Здравствуйте, Валентина,
в XML-структуре файла не надо указывать имя файла и соответственно менять его таким сложным путем.
Надо просто правильно записать макросы в VBA проекте.
В Ribbon XML Editor есть специальна кнопка, которая генерирует VBA код.
Записан

Ничто не обходится нам так дешево и не ценится так дорого, как вежливость...  Мигель Сервантес де Сааведра

Valetnina
Постоялец
***

Репутация: +2/-0
Офлайн Офлайн

Сообщений: 153



Просмотр профиля WWW E-mail
« Ответ #2 : 01.07.2020, 11:16:44 »

Вот это подсказка.
Вчера я не поняла, о чем речь.
Спасибо. Получается, надо просто
не писать в структуре имя файла
перед названием макроса.
Вопрос решен Улыбка
Записан
Страниц: [1]   Вверх
Печать
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2011, Simple Machines Valid XHTML 1.0! Valid CSS!
Яндекс.Метрика Рейтинг@Mail.ru