Avatar billede Kentoi Seniormester
20. marts 2019 - 09:28 Der er 11 kommentarer og
1 løsning

VBA i EXCEL

Jeg har lige et lille spørgsmål.
Jeg forsøger at oprette en add-in I excel med denne sub:

Private Sub Workbook_AddinInstall()
With Application.CommandBars("Standard").Controls.Add
.Caption = "The AddIn's menu item"
.OnAction = "'ThisAddin.xls'!Amacro"
End With
End Sub

Den kommando der hedder:
Application.CommandBars("Standard").Controls.Add

Den der "Standard" giver mening hvis jeg sidder og gør det i Excel 2003, men I 365, hvad de forskellige "bars" der?
Er der et sted hvor jeg kan finde de oplysninger eller der en smart måde man kan kode sig ud af det så jeg "løber" dem igennem en efter en?
20. marts 2019 - 09:49 #1
Commandbars er et lævn fra fortiden - før Office 2007 - herefter hedder værktøjslinierne Ribbons... (virker dog ikke i 2003), og laves via xml og f.eks. en ribbon editor - en version kan hentes her http://openxmldeveloper.org/blog/b/openxmldeveloper/archive/2006/05/26/customuieditor.aspx
Men mon ikke du har lidt læse arbejde at gøre dig om Ribbons før du her helt klar - der er masser af artikler herom - just google
Avatar billede Kentoi Seniormester
20. marts 2019 - 09:56 #2
ROFLOL.
Det kan jeg jeg garantere dig for at jeg helt sikkert har. :)

GISP. Er det du XML. OMG. Nå, men tak for linket.

Hvis jeg nu lige må høre hertil sidst. Findes der en modsat af:
Application.CommandBars("Standard").Controls.Add

som sletter en tilføjet add-in?
20. marts 2019 - 10:47 #3
Jow da...
Application.CommandBars("Standard").Controls(1).Delete
Hvor et skal passe til den control du vil slette.
Avatar billede Kentoi Seniormester
20. marts 2019 - 11:02 #4
Hvis jeg nu vil benytte mig af denne Sub:

Private Sub Workbook_AddinUninstall()
End Sub

og jeg vil gerne slette ovenstående addin jeg fik oprettet med:
Private Sub Workbook_AddinInstall()
With Application.CommandBars("Standard").Controls.Add
.Caption = "The AddIn's menu item"
.OnAction = "'ThisAddin.xls'!Amacro"
End With
End Sub

Hvordan skulle den ged barberes?
20. marts 2019 - 11:26 #5
Det kan jeg da ikke huske, det er år siden - men google ved alt som commandbars, men du kan vel altid loop dig igennem controls og se om en har den forventede caption...

Måske sådan noget...
for x = Application.CommandBars("Standard").Controls.Count
if Application.CommandBars("Standard").Controls(x).Caption = "this ad..." Then
Application.CommandBars("Standard").Controls(x).delete
exit for
end if
next

google is your friend med sådan noget legacy kode :-)
20. marts 2019 - 11:32 #6
Jeg har fundet denne kode i et gammelt faktura program jeg engang lavede - brug det kan og glem resten. Godt nok er sub'en MyNewMenu udkommenteret, men det var vist den der lavede menu'en on the fly...

Option Explicit
'Menu
    'Er grundstenen i menu'erne
    'Menu'erne for de enkelte ark bliver lavet oprettet fra de enkelte arks kode
    'Der er flere undermakro'er, der bruges til menu dannelse/sletning
    'Herefter følger alle de forskellige arks menu-punkt OnAction
Public MenuObject As CommandBarPopup
Public SubMenu As CommandBarPopup
Public MenuItem As Object
Public SubMenuItem As CommandBarButton
Public Const strMenuName As String = "F&aktura"
Public Const strMenuNo As String = 11
Public Const intBarsNo As Integer = 1
Public HideMe As String

Sub MyNewMenu(HideMe As String)
'Values to variables
    'strMenuName = "F&aktura"
    'strMenuNo = "11"
    'intBarsNo = 1

'  Make sure the menus aren't duplicated
    'DeleteMenu HideMe

    'Add MainMenu
    'CreateMainMenu strMenuName, strMenuNo, intBarsNo
   
    'Add to MainMenu - ControlPopup and ControlButton
    'CreateMenuItem "Item &1", "DummyMacro", "71", False
    'CreateSubMenu "&Faktura", True
        'CreateSubMenuItem "&Fakturer", "DummyMacro", "85", False
 
End Sub

Sub CreateMainMenu(strMenuName, strMenuNo As String, intBarsNo As Integer)
'En ny hovedmenu
    Set MenuObject = Application.CommandBars(intBarsNo).Controls.Add(Type:=msoControlPopup, _
                    Before:=strMenuNo, Temporary:=True)
        MenuObject.Caption = strMenuName
End Sub

Sub CreateMenuItem(strCaption, strOnAction, strFaceId As String, bolBeginGroup As Boolean)
'Et menupunkt punkt direkte i hovedmenu'en
    'MenuItem
    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
        With MenuItem
            .Caption = strCaption
            .OnAction = strOnAction
            .FaceId = strFaceId
            .BeginGroup = bolBeginGroup
        End With
End Sub

Sub CreateSubMenu(strCaption As String, bolBeginGroup As Boolean)
'En menugruppe i hovedmenuen
    'SubMenu
    Set SubMenu = MenuObject.Controls.Add(Type:=msoControlPopup)
        With SubMenu
            .Caption = strCaption
            .BeginGroup = bolBeginGroup
        End With
End Sub

Sub CreateSubMenuItem(strCaption, strOnAction, strFaceId As String, bolBeginGroup As Boolean)
'Et menupunkt i en menugruppe
    'SubMenu Item - UnderMenuPunkt
    Set SubMenuItem = SubMenu.Controls.Add(Type:=msoControlButton)
        With SubMenuItem
            .Caption = strCaption
            .OnAction = strOnAction
            .FaceId = strFaceId
            .BeginGroup = bolBeginGroup
        End With
End Sub

Sub DeleteMenu(HideMe As String)
'  This sub should be executed when the workbook is closed
'  Deletes the Menus
    On Error Resume Next
            Application.CommandBars(intBarsNo).Controls(strMenuName).Delete
    On Error GoTo 0
End Sub
Avatar billede Kentoi Seniormester
20. marts 2019 - 11:32 #7
ROFL.

Tak skal du have.
Avatar billede Kentoi Seniormester
20. marts 2019 - 13:37 #8
Hej Flemming.
Jeg tror at jeg er ved at forstå hvordan add-ins bliver genereret.
Men jeg har lige et lille spørgsmål mere, hvis det er ok.
Hvis jeg nu gerne vil "fange" den add-ins der er standard I Excel og tilføje ikoner der.
Jeg har via CUIE mulighed for at putte et example af en der kan jeg se at der findes en tab id="customTab". Jeg vil bare få et faneblad der hedder customTAB, hvis jeg bruger dette. Hvordan skulle min XML så se ud, hvis jeg vil have fat I Add-ins?
20. marts 2019 - 13:56 #9

<?xml version="1.0" encoding="UTF-8"?>
<customUI onLoad="Ribbon_Load" xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon>
        <tabs>
<tab id="tabDKPanels" label="Kentoi" insertBeforeMso="TabHome">


            </tab>
        </tabs>
    </ribbon>
</customUI>
20. marts 2019 - 13:56 #10
Så skal du læse dig til info om de andre xml funktioner - Group, Button, Menu; ToggleButton osv...
20. marts 2019 - 13:58 #11
Avatar billede Kentoi Seniormester
20. marts 2019 - 14:39 #12
Hej Flemming.
Vil bare lige sige mange tak for hjælpen.
Jeg fandt ud af med dit links at det var:
<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui">
    <ribbon startFromScratch="false">
        <tabs>
            <tab idMso="TabAddIns" label="Add-ins">
                <group id="customGroup" label="Custom Group">
                    <button id="customButton" label="Custom Button" imageMso="HappyFace" size="large" onAction="Callback" />
                </group>
            </tab>
        </tabs>
    </ribbon>
</customUI>

der skal bruges for at få "plantet" et ikon i standard faneblad "Add-ins".
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester