Styra knappstatus

I detta tips demonstreras tekniker för att markera om en knapp är aktiverad eller inte. Det kan komma väl till användning i situationer där det krävs en visuell kommunikation mellan XL och användarna.

Tipsen har sin utgångspunkt i att växla mellan att visa stödlinjer eller inte i det aktiva arbetsbladet.

 

I det första tipset visas hur vi styr statusen för en knapp som har en knappbild.

Option Explicit

 Sub Skapa_Vaxel_Knapp()

   '© 2002 Alla rättigheter XL-Dennis

   Dim cbABmeny As CommandBar

   Dim ccEgenMeny As CommandBarControl

   Dim iHjalp As Integer

    Set cbABmeny = Application.CommandBars(1)

    'Här säkerhetsställer vi att inget menyalternativ med namnet existerar.

   On Error Resume Next

   cbABmeny.Controls("Stödlinjer").Delete

   On Error GoTo 0

 

   'Här identifieras hjälpmenyns indextal

   iHjalp = cbABmeny.Controls("Hjälp").Index

 

   'Vi skapar menyalternativet och placerar menyn före Hjälp.

   Set ccEgenMeny = _

         cbABmeny.Controls.Add(Type:=msoControlButton, _

         Before:=iHjalp)

    Här byggs knappen upp.

   With ccEgenMeny

      .Style = msoButtonIconAndCaption

      .Caption = "Stödlinjer"

      .FaceId = 343

      .OnAction = "TaBort_LaggTill_Stodlinjer"

   End With

 End Sub

 

Sub TaBort_LaggTill_Stodlinjer()

   '© 2002 Alla rättigheter XL-Dennis

   Dim cbKnapp As CommandBarButton

 

   Set cbKnapp = Application.CommandBars(1).Controls("Stödlinjer")

   'Här växlas status på knappläget.

   cbKnapp.State = Not cbKnapp.State

 

   'Här växlas om stödlinjer ska visas eller inte.

   ActiveWindow.DisplayGridlines = Not ActiveWindow.DisplayGridlines

End Sub

 

I nästa tips visas hur vi sätter en bock framför menyalternativet samt hur vi avbockar alternativet.
Detta fungerar endast på knappar utan bild.

Sub Skapa_Bock_Knapp()

   '© 2002 Alla rättigheter XL-Dennis

   Dim cbABmeny As CommandBar

   Dim ccEgenMeny As CommandBarControl

   Dim iHjalp As Integer

    Set cbABmeny = Application.CommandBars(1)

 

   On Error Resume Next

   cbABmeny.Controls("Stödlinjer1").Delete

   On Error GoTo 0

 
   iHjalp = cbABmeny.Controls(
"Hjälp").Index

 

    Set ccEgenMeny = _

         cbABmeny.Controls.Add(Type:=msoControlPopup, _

         Before:=iHjalp)

 

   'Här byggs menyn upp.

   With ccEgenMeny

      .Caption = "Stödlinjer1"

      With .Controls.Add(Type:=msoControlButton)

         .Caption = "Växla"

         .OnAction = "TaBort_LaggTill_Stodlinjer1"

      End With

   End With  

End Sub

 

Sub TaBort_LaggTill_Stodlinjer1()

   '© 2002 Alla rättigheter XL-Dennis

   Dim cbKnapp As CommandBarButton

   Set cbKnapp = Application.CommandBars(1).Controls("Stödlinjer1").Controls("Växla")

 

   'Bockar för/av knappen och ändrar på status för stödlinjer.

   If ActiveWindow.DisplayGridlines = False Then

      cbKnapp.State = msoButtonDown

      ActiveWindow.DisplayGridlines = True

   Else

      cbKnapp.State = msoButtonUp

      ActiveWindow.DisplayGridlines = False

   End If  

End Sub