#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