• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Zelf maken van een Add-In

Status
Niet open voor verdere reacties.
Beste als ik bovenstaande code in de xlam zet krijg ik bij opstarten van excel een foutmelding 91 'object variable or With block variable not set.

Wat kan de oorzaak hiervan zijn en hoe los ik dit op?
 
Hmm, de code wordt net iets te vroeg gestart. Vervang dit:

Code:
Mst_ribbonui.InvalidateRibbon

door:

Code:
If Mst_ribbonui Is Nothing Then Exit Sub
Mst_ribbonui.InvalidateRibbon
 
Beste JK,

Bedankt voor uw reactie, het openen van excel geeft nu geen foutmelding meer.

Maar spijtig genoeg heb ik nog niet het gewenste resultaat mbt de werking (=disabled of enabled) van de knoppen en het 'Marketing Selection Tool'- menu (zie #33)
 
Zet eens een breekpunt op die routine (op het if statement) en wissel eens van bestand, wordt dat event gestart? ZO ja, wordt het INvalidate statement wel eens aangeroepen?
 
Beste JK,

Ik heb een breakpunt op die routine (op het if statement) gezet en dan gewisseld van bestand. Bij de eerste keer wisselen wordt gestopt op het breekpunt, Wordt nog eens gewisseld komt het programma niet in Sub XLApp_WindowActivate
 
Sorrie, Het moest zijn Invalidate, niet InvalidateRibbon.
Verder staat er een tikvoutje in je code:

Code:
Public Function btnEnabled(btn As String) As Boolean
    If ExistSheet("MST[COLOR="#FF0000"]-[/COLOR]Params") Then
        Select Case UCase(btn)
            Case "NEW":  btnEnabled = LCase(Sheets("MST_Params").Range("M1")) = "enabled"
            Case "OPEN": btnEnabled = LCase(Sheets("MST_Params").Range("M2")) = "enabled"
            Case "ADD":  btnEnabled = LCase(Sheets("MST_Params").Range("M3")) = "enabled"
            Case "SHOW": btnEnabled = LCase(Sheets("MST_Params").Range("M4")) = "enabled"
            Case "SAVE": btnEnabled = LCase(Sheets("MST_Params").Range("M5")) = "enabled"
        End Select
    End If
End Function
 
Kan de beste overkomen, ga ik uittesten...

Ik denk niet dat het gaat om een tikfoutje bij
Code:
If ExistSheet("MST-Params") Then
        Select Case UCase(btn)
            Case "NEW":  btnEnabled = LCase(Sheets("MST_Params").Range("M1")) = "enabled"
            Case "OPEN": btnEnabled = LCase(Sheets("MST_Params").Range("M2")) = "enabled"
            Case "ADD":  btnEnabled = LCase(Sheets("MST_Params").Range("M3")) = "enabled"
            Case "SHOW": btnEnabled = LCase(Sheets("MST_Params").Range("M4")) = "enabled"
            Case "SAVE": btnEnabled = LCase(Sheets("MST_Params").Range("M5")) = "enabled"
        End Select
    End If
End Function

Ik verwijs naar de sheet zelf (MST_Params") staat tussen qoutes en niet naar de variabele 'mst-Params'
 
Beste ik heb nog 2 vraagjes:
1) Als ik een bestaand excel-docu open en er is een tabblad "MST_Params" aanwezig zouden de knoppen moeten gezet worden volgens de parameters op het tabblad "MST_Params". Is dit mogelijk?
2) Ik heb een bestaand excel-docu geopend en doordat er bepaalde zaken gebeurd zijn (status is gewijzigd) moet een knop weer geenabled worden. Dit doe ik door in het tabblad "MST_Params" het juiste veld op enabled te zetten.
Hoe zorg ik er nu voor dat de knoppen geupdate worden?

Graag hoor ik van jullie.
 
Kijk nog eens goed, in de eerste regel staat er een min-teken in, in de rest een underscore
 
Jan Karel,

Mijn excuses, je had gelijk... het moest "MST_Params" zijn...
 
Beste,

Het is bijna werkend nog 2 kleine probleempjes:
1) Als ik een bestaand excel-docu open en er is een tabblad "MST_Params" aanwezig worden de knoppen niet onmiddelijk gezet volgens de parameters op het tabblad "MST_Params". Wel als ik wissel naar een ander bestand en dan terug naar excel dan worden ze wel gezet. Hoe kan ik dit 'forceren'?
2) Een tweede probleempje: als ik 1 van de waarden van het tabblad "MST_Params" wijzig (mbt tot enable/disable) de knoppen, worden de instellingen niet onmiddellijk geactiveerd. Na het wisselen naar een ander bestand en weer terug worden de nodige knop-instellingen geactiveerd. wordt dit nietIk heb een bestaand excel-docu geopend en doordat er bepaalde zaken gebeurd zijn (status is gewijzigd) moet een knop weer geenabled worden. Dit doe ik door in het tabblad "MST_Params" het juiste veld op enabled te zetten. Hoe kan ik dit 'forceren'?

Graag hoor ik van jullie?
 
Vervang de inhoud van ThisWorkbook eens door:

Code:
Private WithEvents XLApp As Excel.Application

Private Sub Workbook_Open()
    MST_Params = "MST_Params"
    Set XLApp = Application
End Sub

Private Sub XLApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name <> "MST_Params" Then Exit Sub
    If Mst_ribbonui Is Nothing Then Exit Sub
    Mst_ribbonui.Invalidate
End Sub

Private Sub XLApp_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
    If Mst_ribbonui Is Nothing Then Exit Sub
    Mst_ribbonui.Invalidate
End Sub

Private Sub XLApp_WorkbookOpen(ByVal Wb As Workbook)
    If Mst_ribbonui Is Nothing Then Exit Sub
    Mst_ribbonui.Invalidate
End Sub
 
Beste,

ik heb de code toegevoegd. Deze worden uitgevoerd maar de knoppen veranderen niet.
 
Ik kan alleen maar zeggen zet breekpunten op strategische plaatsen en kijk waar het scheef gaat.
 
Beste,

In onderstaande macro's:

Code:
Private WithEvents XLApp As Excel.Application

Private Sub Workbook_Open()
    MST_Params = "MST_Params"
    Set XLApp = Application
End Sub

Private Sub XLApp_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    If Sh.Name <> "MST_Params" Then Exit Sub
    If Mst_ribbonui Is Nothing Then Exit Sub
    Mst_ribbonui.Invalidate
End Sub

Private Sub XLApp_WindowActivate(ByVal Wb As Workbook, ByVal Wn As Window)
    If Mst_ribbonui Is Nothing Then Exit Sub
    Mst_ribbonui.Invalidate
End Sub

Private Sub XLApp_WorkbookOpen(ByVal Wb As Workbook)
    If Mst_ribbonui Is Nothing Then Exit Sub
    Mst_ribbonui.Invalidate
End Sub

worden de macro's bij het runnen meestal verlaten bij de regel
Code:
If Mst_ribbonui Is Nothing Then Exit Sub

Kan ik Mst_ribbonui op de 1 of andere manier een relevante waarde geven ?
 
Twee mogelijkheden.

1. Mst_ribbonui_onload is nog niet aangeroepen door Excel en dus is die variabele nog leeg (is ook niet erg, initialisatie van Excel is ook nog niet klaar)
2. Er is een runtime error geweest waardoor die variabele haar waarde heeft verloren. Alleen te fixen met een setje Windows API calls of door de invoegtoepassing opnieuw te starten.
 
Volgens mij zal de reden zijn dat Mst_ribbonui_onload nog niet is aangeroepen. Excel is volgens mij wel volledig klaar met initialisatie. En wanneer wordt deze aangeroepen? Kan ik de aanroep forceren?
 
Je kunt makkelijk detecteren of en wanneer die wordt aangeroepen door er bijv. een msgbox in te zetten.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan