Страницы: 1
RSS
Очистка книги от пользовательской Ribbon и макросов.
 
Добрый день.
Есть книга с макросами и пользовательской панелью (ribbon). После работы с файлом необходимо удалить эту панель и очистить книгу от макросов.
1. Для удаления (точнее скрытия) панели использую следующий момент:
в XML коде моего excel-файла  меня есть строка
Код
<customUI onLoad="RibbonOnLoad" xmlns="http://schemas.microsoft.com/office/2006/01/customui">
А, соответственно в модуле книги есть макрос:
Код
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" (что логично, макросы то из книги удалены).

Может кто сталкивался с подобной задачей и знает изящные варианты ее решения?

Спасибо.
Изменено: crjk - 03.06.2020 17:50:30
 
Доброе время суток.
Самое простое, работая с xlsx файлом как с zip-архивом, удалить там файл CustomUI.xml и/или CustomUI14.xml
Изменено: Андрей VG - 03.06.2020 18:52:09
 
Вручную удалить я это могу и через Custom UI editor, задача в том, чтобы сделать это кнопкой - без манипуляций с zip и другими программами.
 
Цитата
crjk написал:
чтобы сделать это кнопкой
На кнопку вешается макрос, который после закрытия свежесозданного xlsx^
меняет ему расширение с xlsx на zip
используя ActiveX Shell.Application  (штатно существующий, начиная с Windows XP) удаляет переносит выше названные файлы в папку temp.
используя Scripting.FileSystemObject удаляет эти файлы.
меняет расширение обратно с zip на xlsx.

Как видите, алгоритм достаточно простой. Часть кода можно посмотреть в интернете.

P. S. Обновил - давно не ковырялся в этом направлении.
Изменено: Андрей VG - 03.06.2020 19:13:23
 
Алгоритм простой, но весьма костыльный :)
Нет ли вероятности получить проблемы с правами юзеров? (запустится ли этот скрипт без прав администратора)
Спасибо за предложенный вариант, послушаем еще посетителей форума, может кто-то решал схожую проблему как-то по-другому.
 
а в чём, простите, состоит костыльность?
вариант кода
Соблюдение правил форума не освобождает от модераторского произвола
 
Придумал простое решение, просто скопировать листы в xlsx файл.
Код
    ThisWorkbook.Sheets.Copy
    Dim wbNew
    Set wbNew = ActiveWorkbook
    
    wbNew.SaveAs ThisWorkbook.Path & "\NewName" & "_" & Date & "_" & Replace(Time, ":", "_"), FileFormat:=xlOpenXMLWorkbook
    wbNew.Close
Изменено: crjk - 08.06.2020 10:48:40
 
Цитата
crjk написал:
скопировать листы в xlsx файл
Если ссылки не полетят, то вполне себе добротное решение. Спасибо.
 
При поверхностном осмотре всё нормально :)
Страницы: 1
Наверх