eigenwerkbalk .onaction probleempje

Status
Niet open voor verdere reacties.

Interface

Gebruiker
Lid geworden
27 jan 2009
Berichten
156
Goedendag,

Ik heb een XLA met daarin een module die wordt aangeroepen bij Workbook open().

De procedure in de module genereert een werkbalk. De actie die uitgevoerd moet worden na het drukken op de button op de werkbalk is een procedure met een een variabele.

Nu lukt het wel om een numerieke waarde door te geven maar niet om een string waarde door te geven.

Wat wel lukt is:

Code:
Sub bowser1(ByVal bytSheet As byte) 

Dim intTeller As Integer

Application.ScreenUpdating = False

On Error Resume Next

With Sheets(strSheet)
    For intTeller = 2000 To 1 Step -1
        If .Range("d" & intTeller).Value = "" Then
            .Rows(intTeller).Delete
        End If
    Next

End With

Rows(1).Delete

Application.ScreenUpdating = True

End Sub

Sub Openen()

Dim cb As CommandBar
Dim cbcRegelVerwijderen As CommandBarControl
Dim bytTeller As Byte

    bytTeller = 1
    
    On Error Resume Next

    With Application
        For Each cb In .CommandBars
            If cb.Name = "VerwijderRegel" Then cb.Delete
        Next

        .CommandBars.Add(Name:="VerwijderRegel").Visible = True

        Set cbcRegelVerwijderen = .CommandBars("VerwijderRegel").Controls.Add(Type:=msoControlButton)

        With cbcRegelVerwijderen
            .Caption = "verwijder lege regels"
            [B][COLOR="Red"].OnAction = "bowser1(" & bytTeller & ")"[/COLOR][/B]
            .FaceId = 643
            .Style = msoButtonIconAndCaption
        End With

End With

End Sub

En wat dan niet lukt is dit:

Code:
Sub bowser2(ByVal bytSheet As String)

Dim intTeller As Integer

Application.ScreenUpdating = False

On Error Resume Next

With Sheets(strSheet)
    For intTeller = 2000 To 1 Step -1
        If .Range("d" & intTeller).Value = "" Then
            .Rows(intTeller).Delete
        End If
    Next

End With

Rows(1).Delete

Application.ScreenUpdating = True

End Sub

Sub Openen2()

Dim cb As CommandBar
Dim cbcRegelVerwijderen As CommandBarControl
Dim strSheet As String

    On Error Resume Next
    
    strSheet = Sheets(1).Name
    
    With Application
        For Each cb In .CommandBars
            If cb.Name = "VerwijderRegel" Then cb.Delete
        Next

        .CommandBars.Add(Name:="VerwijderRegel").Visible = True

        Set cbcRegelVerwijderen = .CommandBars("VerwijderRegel").Controls.Add(Type:=msoControlButton)

        With cbcRegelVerwijderen
            .Caption = "verwijder lege regels"
            [B][COLOR="Red"].OnAction = "bowser2(" & strSheet & ")"[/COLOR][/B]
            .FaceId = 643
            .Style = msoButtonIconAndCaption
        End With

End With

End Sub

Voor het bovenstaande bestand is het niet zo van belang maar ik heb een bestand gemaakt waarbij dit wel van belang is. Aangezien ik de code die hierboven staat ergens had opgeslagen heb ik dit maar even als voorbeeld gebruikt.

Is het überhaupt mogelijk om via deze manier een string door te geven/ aan .onAction door te geven? Of pak ik het gewoon helemaal verkeerd aan?
 
Mij lijkt het doorgeven van argumenten bij het verwijderen van lege regels niet echt nodig. Ook de code kan wat eenvoudiger.
Waarom je gebruik maakt van ByVal is me niet duidelijk.
Hoewel het lijkt alsof je een variabele wijze van aanroepen hebt is dat toch niet het geval : zowel bytTeller als strSheet worden 1 keeer ingesteld en zijn daarna invariant.
Ik betwijfel of je met het instellen van de eigenschap OnAction een variabel argument kunt meegeven.

Code:
Sub bowser1() 
  Application.ScreenUpdating = False
    ActiveSheet.range("D1:D2000").specialcells(xlCelltypeBlanks).entirerow.delete
  Application.ScreenUpdating = True
End Sub

Code:
Sub Openen()
    On Error Resume Next
    With Application
      .CommandBars("VerwijderRegel").Delete
      With .CommandBars.Add
        .Name="VerwijderRegel"
        With .Controls.Add(msoControlButton)
            .Caption = "verwijder lege regels"
            .OnAction = "bowser1(" & bytTeller & ")"
            .FaceId = 643
            .Style = msoButtonIconAndCaption
        End With
     End With
   End With
End Sub
 
Laatst bewerkt:
bedankt tot zover snb...

Ik betwijfel of je met het instellen van de eigenschap OnAction een variabel argument kunt meegeven.

Ja dit kan zeker weten, maar op de één of andere manier lukt dit niet met een alfanumerieke waarde maar wel met een numerieke waarde.

Is er niet een makkelijkere manier? Aangezien het enige wat er moet gebeuren is de .caption van de werkbalk knop doorgeven als variabele aan een sub die daar wel raad mee weet.

Ik heb hier ergens een keer gelezen over application.caller is dat mogelijk op deze manier?

Bedankt voor het script van het verwijderen van de lege regels(was niet nodig geweest omdat mijn vraag daar niet over ging), als ik het zo lees zal het allicht sneller werken dan mijn script.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan