18. december 2008 - 11:48
Der er
2 kommentarer og
1 løsning
Kan man gøre en formularknap inaktiv
Her er tale om en formularknap og ikke en kommandoknap.
Det jeg ønsker, er en kommando der gør formularknappen inaktiv (således den kan ses, men ikke trykkes på). Selvom man tror det, så er virker følgende kode ikke efter den hensigt.
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"
With btn1
.Caption = "Sig Hej?"
.Font.Bold = True
.OnAction = "Hej"
.Enabled = False
End With
End Sub
Sub Hej()
MsgBox "Hej med dig!"
End Sub
Det jeg ønsker, er at knappen er synlig, men "greyed-out" og ikke-klikbar (før man kører en gør-knap-klikbar-kode).
18. december 2008 - 16:50
#3
Efter lang tids kamp satte jeg mig ned og læste på de kommandoknapper. Så ingen ko på isen, det er løst :)
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.