Добрый день. Есть книга с макросами и пользовательской панелью (ribbon). После работы с файлом необходимо удалить эту панель и очистить книгу от макросов. 1. Для удаления (точнее скрытия) панели использую следующий момент: в XML коде моего excel-файла меня есть строка
Public Sub ClearFileForClient(ByRef rc As IRibbonControl)
HideMyRibbonTab
End Sub
Sub RibbonOnLoad(Ribbon As IRibbonUI)
Set Ribn = Ribbon
End Sub
Sub HideMyRibbonTab()
RibnTag = "HideTab"
If Not Ribn Is Nothing Then
Ribn.Invalidate
End If
End Sub
С помощью этой процедуры панель успешно скрывается.
2. Для удаления кода я сохраняю файл в xlsx формате.
Но возникает проблема, что при открытии свежесозданного xlxs файла вылезает ошибка "Cannot run the macro "RibbonOnLoad", because macroses is cleared" (что логично, макросы то из книги удалены).
Может кто сталкивался с подобной задачей и знает изящные варианты ее решения?
На кнопку вешается макрос, который после закрытия свежесозданного xlsx^ меняет ему расширение с xlsx на zip используя ActiveX Shell.Application (штатно существующий, начиная с Windows XP) удаляет переносит выше названные файлы в папку temp. используя Scripting.FileSystemObject удаляет эти файлы. меняет расширение обратно с zip на xlsx.
Как видите, алгоритм достаточно простой. Часть кода можно посмотреть в интернете.
P. S. Обновил - давно не ковырялся в этом направлении.
Алгоритм простой, но весьма костыльный Нет ли вероятности получить проблемы с правами юзеров? (запустится ли этот скрипт без прав администратора) Спасибо за предложенный вариант, послушаем еще посетителей форума, может кто-то решал схожую проблему как-то по-другому.