2015-12-18 22 views
0

我有一个excel工作簿,其中包含几百个标签,除非需要,这些标签都是非常隐藏的。我设置了它,以便用户可以从主工作表中选择一个数据源,并将它们传输到他们需要的特定工作表。然后当他们完成他们的任务时,他们回到主表单,所有的都被隐藏起来。我需要的是一种将命令按钮附加到功能区的方式,以便它始终存在并隐藏除主表以外的所有内容。Excel功能区上的永久退出按钮

我已经与每个工作表上放了一个按钮,甚至尝试了一个浮动的形式,留在角落里。虽然这些都是答案,但我宁愿只将一个按钮附加到功能区并忘记它。但是,如何动态创建功能区中的按钮,并与工作簿一起传输,以便任何计算机上的每个用户都可以使用该按钮?

+0

不是一个按钮,而,使用** ** QAT您 –

+0

不能创建在VBA功能区控制,但如果你通过'申请使用'CommandBars' API .CommandBars“它会在”加载项“功能区选项卡下创建按钮。在工作簿的Workbook_Open事件处理程序中创建按钮,并在打开该工作簿时显示该按钮。一个好主意是在工作簿关闭时也删除按钮。 –

+0

我探讨了这一点,这里的问题是,我无法找到任何有关动态创建可以运行VBA代码的加载项的信息。加载项是必须安装或激活的预包装插件和播放。 – Hareborn

回答

0

我找到了解决办法,为我的工作簿创建了自定义选项卡和按钮。它会在工作簿打开时创建选项卡,并在关闭本书时将其删除。

私人小组Workbook_Activate()

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\" & user & "\AppData\Local\Microsoft\Office\" 
fileName = "Excel.officeUI" 

ribbonXML = "<mso:customUI  xmlns:mso='http://schemas.microsoft.com/office/2009/07/customui'>" & vbNewLine 
ribbonXML = ribbonXML + " <mso:ribbon>" & vbNewLine 
ribbonXML = ribbonXML + " <mso:qat/>" & vbNewLine 
ribbonXML = ribbonXML + " <mso:tabs>" & vbNewLine 
ribbonXML = ribbonXML + "  <mso:tab id='reportTab' label='Pats Tools' insertBeforeQ='mso:TabFormat'>" & vbNewLine 
ribbonXML = ribbonXML + "  <mso:group id='reportGroup1' label='Month' autoScale='true'>" & vbNewLine 
ribbonXML = ribbonXML + "   <mso:button id='Months1' label='Previous' " & vbNewLine 
ribbonXML = ribbonXML + "imageMso='AccessTableEvents'  onAction='MonthPrevious.calling'/>" & vbNewLine 
ribbonXML = ribbonXML + "   <mso:button id='Months2' label='Current' " & vbNewLine 
ribbonXML = ribbonXML + "imageMso='AccessListEvents'  onAction='MonthCurrent.calling'/>" & vbNewLine 
ribbonXML = ribbonXML + "   <mso:button id='Months3' label='Next' " & vbNewLine 
ribbonXML = ribbonXML + "imageMso='AccessTableEvents'  onAction='MonthNext.calling'/>" & vbNewLine 
ribbonXML = ribbonXML + "   <mso:button id='Months4' label='All' " & vbNewLine 
ribbonXML = ribbonXML + "imageMso='AccessTableEvents'  onAction='AllMonths.calling'/>" & vbNewLine 
ribbonXML = ribbonXML + "  </mso:group>" & vbNewLine 
ribbonXML = ribbonXML + "  <mso:group id='reportGroup2' label='Properties' autoScale='true'>" & vbNewLine 
ribbonXML = ribbonXML + "   <mso:button id='Properties1' label='All' " & vbNewLine 
ribbonXML = ribbonXML + "imageMso='BlogHomePage'  onAction='AllProperties.calling'/>" & vbNewLine 
ribbonXML = ribbonXML + "   <mso:button id='Properties2' label='Name1' " & vbNewLine 
ribbonXML = ribbonXML + "imageMso='BlogHomePage'  onAction='Name1.calling'/>" & vbNewLine 
ribbonXML = ribbonXML + "   <mso:button id='Properties3' label='Name2' " & vbNewLine 
ribbonXML = ribbonXML + "imageMso='BlogHomePage'  onAction='Name2.calling'/>" & vbNewLine 
ribbonXML = ribbonXML + "   <mso:button id='Properties4' label='Name3' " & vbNewLine 
ribbonXML = ribbonXML + "imageMso='BlogHomePage'  onAction='Name3.ClearSheet'/>" & vbNewLine 
ribbonXML = ribbonXML + "   <mso:button id='Properties5' label='Name4' " & vbNewLine 
ribbonXML = ribbonXML + "imageMso='BlogHomePage'  onAction='Name4.calling'/>" & vbNewLine 
ribbonXML = ribbonXML + "   <mso:button id='Properties6' label='Name5' " & vbNewLine 
ribbonXML = ribbonXML + "imageMso='BlogHomePage'  onAction='Name5.calling'/>" & vbNewLine 
ribbonXML = ribbonXML + "  </mso:group>" & vbNewLine 
ribbonXML = ribbonXML + "  <mso:group id='reportGroup4' label='Edit Task' autoScale='true'>" & vbNewLine 
ribbonXML = ribbonXML + "   <mso:button id='ActionButton1' label='Type' " & vbNewLine 
ribbonXML = ribbonXML + "imageMso='BlogHomePage'  onAction='AddTypemod.calling'/>" & vbNewLine 
ribbonXML = ribbonXML + "   <mso:button id='ActionButton2' label='Section' " & vbNewLine 
ribbonXML = ribbonXML + "imageMso='BlogHomePage'  onAction='AddSectionMod.calling'/>" & vbNewLine 
ribbonXML = ribbonXML + "   <mso:button id='ActionButton3' label='Empty' " & vbNewLine 
ribbonXML = ribbonXML + "imageMso='BlogHomePage'  onAction='CedarCreek.calling'/>" & vbNewLine 
ribbonXML = ribbonXML + "  </mso:group>" & vbNewLine 
ribbonXML = ribbonXML + "  </mso:tab>" & vbNewLine 
ribbonXML = ribbonXML + " </mso:tabs>" & vbNewLine 
ribbonXML = ribbonXML + " </mso:ribbon>" & vbNewLine 
ribbonXML = ribbonXML + "</mso:customUI>" 

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

Open path & fileName For Output Access Write As hFile 
Print #hFile, ribbonXML 
Close hFile 

End Sub 
+0

注意:您可以在VBA中用下划线而不是“&vbNewLine”在该行的结尾并用“&”而不是“ribbonXML = ribbonXML +”开始下一行。它看起来不那么嘈杂,但有一个总的线路限制。以下是一个示例讨论:http://stackoverflow.com/questions/19422064/break-a-long-sql-vba-statement-into-multiple-lines –