Avatar billede friis5 Novice
05. december 2008 - 18:54 Der er 4 kommentarer og
1 løsning

Ændre baggrundsfarven på en knap i arket

Hvis jeg laver en knap således;

Sub test()
Dim btn1 As Object
Dim oLeft As Double, oTop As Double, oWidth As Double, oHeight As Double
Dim rng As Range

    Set rng = ActiveSheet.Range("A2:C3")

    oLeft = rng.Left + 5
    oTop = rng.Top
    oWidth = rng.Width - 10
    oHeight = rng.Height

    Set btn1 = ActiveSheet.Buttons.Add(oLeft, oTop, oWidth, oHeight)
    btn1.Name = "Test Knap"
   
    With btn1
        .Caption = "Sig Hej?"
        .Font.Bold = True
        .OnAction = "Hej"
    End With
End Sub
Sub Hej()
    MsgBox "Hej med dig!"
End Sub

Altså laver jeg en knap, der ikke er en Kommandoknap - men bare en almindelig knap.

Kan jeg så ændre baggrundsfarven på denne?
Avatar billede jkrons Professor
06. december 2008 - 00:20 #1
Formularknapper har ikke nogen egenskab, der styre baggrundsfarven. Det har kun kommandoknapper.
Avatar billede friis5 Novice
06. december 2008 - 13:08 #2
Det var da nedtur.

Kan man i koden til kommando-knappen skrive hvilken makro den skal køre? Og videre, hvis man i koden sletter den igen, så også slette al kode til den? (eller kan man gøre dem usynlige nemt?)

Giv gerne noget kode eksempel - da jeg er rigtig dårlig til de kommandoknapper :/
Avatar billede jkrons Professor
06. december 2008 - 13:40 #3
Du kan knyttwe makroer til kommandoknapper, men gør det normalt ikke, da koden som knappen skal udføre, normalt vil være placeret på selve klik-hændelsen på knappen. Så sletter du knappen, sletter du også koden.
Avatar billede friis5 Novice
06. december 2008 - 15:24 #4
Mulighed for at få et eksempel (a la ovenstående). De gange jeg har arbejdet med dem, har koden altid stået i arket og knapperne kunne ikke bare oprettes og slettes igen. Hvilket imo gør dem lidt mindre fleksible. Dog har de en masse andre egenskaber, der gør dem lidt frække.

Men et eksempel, hvor en makro opretter en knap og tildeler den kode. - Samt en makro der sletter denne knap igen - det ville være skønno :)
Avatar billede friis5 Novice
18. december 2008 - 16:53 #5
Som postet andet steds, så har jeg lavet en løsning med kommandoknapper - tak for hjælpen (begge steder).

Til andre nysgerrige;

Sub KommandoKnapTest()
Dim btn1 As OLEObject, btn2 As OLEObject
Dim oLeft As Double, oTop As Double, oWidth As Double, oHeight As Double
Dim rng As Range

    Set rng = ActiveSheet.Range("A1:B2")

    oLeft = rng.Left + 5
    oTop = rng.Top
    oWidth = rng.Width - 10
    oHeight = rng.Height

    Set btn1 = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=oLeft, Top:=oTop, Width:=oWidth, Height:=oHeight)
   
    With btn1
        .Name = "Knap1"
        .Object.Caption = btn1.Name
        .Object.FontSize = 12
        .Object.FontBold = True
        .Enabled = True
        .Object.BackColor = RGB(34, 139, 34) 'grøn
    End With
   
    Set btn2 = ActiveSheet.OLEObjects.Add(ClassType:="Forms.CommandButton.1", Link:=False, DisplayAsIcon:=False, Left:=oLeft, Top:=oTop + oHeight, Width:=oWidth, Height:=oHeight)
   
    With btn2
        .Name = "Knap2"
        .Object.Caption = btn2.Name
        .Object.FontSize = 12
        .Object.FontBold = True
        .Enabled = False
        .Object.BackColor = RGB(255, 69, 0) 'rød
    End With
   
    Call TilFoejKodeTilKnapper
   
End Sub

Sub TilFoejKodeTilKnapper()
Dim Code As String

    Code = "Sub Knap1_Click()" & vbCrLf
    Code = Code & vbTab & "Call Skift(1)" & vbCrLf
    Code = Code & "End Sub" & vbCrLf & vbCrLf

    Code = Code & "Sub Knap2_Click()" & vbCrLf
    Code = Code & vbTab & "Call Skift(2)" & vbCrLf
    Code = Code & "End Sub" & vbCrLf & vbCrLf

    With ActiveWorkbook.VBProject.VBComponents(ActiveSheet.Name).CodeModule
        .insertlines .CountOfLines + 1, Code
    End With

End Sub

Sub Skift(Knap As Integer)
Dim btn1 As OLEObject, btn2 As OLEObject

    Set btn1 = ActiveSheet.OLEObjects("Knap1")
    Set btn2 = ActiveSheet.OLEObjects("Knap2")
   
    If Knap = 1 Then
        btn1.Object.BackColor = RGB(255, 69, 0)
        btn1.Enabled = False
        btn2.Object.BackColor = RGB(34, 139, 34)
        btn2.Enabled = True
    ElseIf Knap = 2 Then
        btn1.Object.BackColor = RGB(34, 139, 34)
        btn1.Enabled = True
        btn2.Object.BackColor = RGB(255, 69, 0)
        btn2.Enabled = False
    End If

End Sub

Til andre der vil lege med det, så opretter ovenstående kode to knapper (inkl. deres underliggende kode). 1 grøn aktiv, og en rød inaktiv. Klikkes der på den aktive knap efter oprettelse skifter egenskaberne. - skal de gøres "synlige/usynlige", vælges da btn2.visible = true/false .
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
Kategori
Vi har et stort udvalg af Excel kurser. Find lige det kursus der passer dig lige her.

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