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?
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 :/
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.
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 :)
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 .