Лента, добавленная с помощью кода VBA, требует времени для отображения в Excel… похоже на проблему с обновлением?

#excel #vba #ribbon

#excel #vba #лента

Вопрос:

После добавления кода VBA для добавления пользовательской ленты я вижу, что для отображения на панели инструментов требуется время. Код VBA для создания ленты вызывается в нашем событии открытия книги.

     Sub LoadCustRibbon(sDummy)
        Dim hFile As Long
        Dim path As String, fileName As String, ribbonXML As String, user As String

        hFile = FreeFile
        user = Environ("Username")
        path = "C:Users" amp; user amp; "AppDataLocalMicrosoftOffice"
        fileName = "Excel.officeUI"

        ribbonXML = "<mso:customUI xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>" amp; vbNewLine
        ribbonXML = ribbonXML   "  <mso:ribbon>" amp; vbNewLine
        ribbonXML = ribbonXML   "     <mso:qat>" amp; vbNewLine
        ribbonXML = ribbonXML   "       <mso:sharedControls>" amp; vbNewLine
        ribbonXML = ribbonXML   "           <mso:button id='RefreshRow' label='RefreshRow' imageMso='Refresh' onAction='RefreshRow'/>" amp; vbNewLine
        ribbonXML = ribbonXML   "           <mso:button id='RefreshSheet' label='RefreshSheet' imageMso='RefreshAll' onAction='RefreshSheet'/>" amp; vbNewLine
        ribbonXML = ribbonXML   "       </mso:sharedControls>" amp; vbNewLine
        ribbonXML = ribbonXML   "     </mso:qat>" amp; vbNewLine
        ribbonXML = ribbonXML   "     <mso:tabs>" amp; vbNewLine
        ribbonXML = ribbonXML   "        <mso:tab id='RefreshTab' label='Refresh Scores' insertBeforeQ='mso:TabFormat'>" amp; vbNewLine
        ribbonXML = ribbonXML   "          <mso:group id='RefreshScoreGrp' label='Refresh Scores' autoScale='true'>" amp; vbNewLine
        ribbonXML = ribbonXML   "             <mso:button id='RefreshRow' label='RefreshRow' imageMso='Refresh' onAction='RefreshRow'/>" amp; vbNewLine
        ribbonXML = ribbonXML   "             <mso:button id='RefreshSheet' label='RefreshSheet' imageMso='RefreshAll' onAction='RefreshSheet'/>" amp; vbNewLine
        ribbonXML = ribbonXML   "          </mso:group>" amp; vbNewLine
        ribbonXML = ribbonXML   "        </mso:tab>" amp; vbNewLine
        ribbonXML = ribbonXML   "     </mso:tabs>" amp; vbNewLine
        ribbonXML = ribbonXML   "  </mso:ribbon>" amp; vbNewLine
        ribbonXML = ribbonXML   "</mso:customUI>"

        ribbonXML = Replace(ribbonXML, """", "")

        Open path amp; fileName For Output Access Write As hFile
        Print #hFile, ribbonXML
        Close hFile
    End Sub
 

Я ожидаю, что при открытии книги лента должна появиться немедленно. Не уверен, чего мне не хватает. Однако я использовал этот фрагмент кода из потока stackoverflow.

Комментарии:

1. Почему вы не редактируете внутренний XML в своем файле Excel (чтобы только файл видел новую ленту), а не ленту из Office Excel (которая влияет на приложение)?

2. Это верно. Я хочу, чтобы лента была видна только при открытии этого документа, поскольку лента использует встроенные частные макросы, которые не доступны для других книг. У меня было временное решение, чтобы сделать ленту видимой, установив msgbox сразу после загрузки пользовательской ленты. Однако это только временное решение.

Ответ №1:

У меня есть временное решение, добавив MsgBox сразу после события LoadCustRibbon в Workbook_Open . Но я бы хотел, чтобы лента отображалась без нее. Любая помощь?

     Private Sub Workbook_Open()
        Call LoadCustRibbon("")
        MsgBox "Please enable macros! Also, go through the 'Read Me' tab on how to use this workbook"
    End Sub