Option Explicit
Public NewForm As Object, NewClass As Object
Sub ShowForm()
Call CreateForm
Call AddClass
VBA.UserForms.Add (NewForm.Name)
UserForms(1).Hide
UserForms(1).Show
ThisWorkbook.VBProject.VBComponents.Remove vbcomponent:=NewForm
ThisWorkbook.VBProject.VBComponents.Remove vbcomponent:=NewClass
End Sub
Private Sub CreateForm()
Dim NewImage As MSForms.Image
Dim iRow As Integer, iCol As Integer
Dim PaletteColours
Dim TopPos As Integer, LeftPos As Integer
Set NewForm = ThisWorkbook.VBProject.VBComponents.Add(3)
NewForm.Properties("Width") = 200
NewForm.Properties("Height") = 195
TopPos = 6
PaletteColours = Array("1", "9", "3", "7", "38", "17", "25", "53", "46", "45", "44", "40", _
"18", "26", "51", "12", "43", "6", "36", "19", "27", "11", "5", "41", "33", "37", "22", "30", _
"52", "10", "50", "4", "35", "20", "28", "49", "14", "42", "8", "34", "21", "29", "55", "47", _
"13", "54", "39", "23", "31", "56", "16", "48", "15", "2", "24", "32")
ReDim Preserve PaletteColours(1 To 56)
LeftPos = 6
For iRow = 1 To 8
TopPos = 6
For iCol = 1 To 7
Set NewImage = NewForm.Designer.Controls.Add("forms.image.1")
With NewImage
.Width = 18
.Height = 18
.Left = LeftPos
.Top = TopPos
.BackColor = ActiveWorkbook.Colors(PaletteColours(iCol + (iRow - 1) * 7))
End With
TopPos = TopPos + 24
Next iCol
LeftPos = LeftPos + 24
Next iRow
End Sub
Private Sub AddClass()
Dim NewMod As Object
On Error Resume Next
Set NewClass = ThisWorkbook.VBProject.VBComponents("Colour")
ThisWorkbook.VBProject.VBComponents.Remove NewClass
On Error GoTo 0
Set NewClass = ThisWorkbook.VBProject.VBComponents.Add(2)
NewClass.Name = "Colour"
With NewClass.CodeModule
.InsertLines 2, _
"Public WithEvents ClrCntrl As Image" & Chr(13) & _
"Private Sub ClrCntrl_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal y As Single)" & Chr(13) & _
"ClrCntrl.SpecialEffect = fmSpecialEffectSunken" & Chr(13) & _
NewForm.Name & ". backcolor = ClrCntrl.backcolor" & Chr(13) & _
NewForm.Name & ".Caption = ""Control colour is "" & ClrCntrl.BackColor" & Chr(13) & _
"End Sub"
End With
Set NewMod = ThisWorkbook.VBProject.VBComponents(NewForm.Name)
With NewMod.CodeModule
.InsertLines 2, _
"Private AA(1 To 56) As New Colour" & Chr(13) & _
"Private Sub UserForm_Initialize()" & Chr(13) & _
"Dim IM As Control, i as Long" & Chr(13) & _
"i = 1" & Chr(13) & _
"For Each IM In " & NewForm.Name & ".Controls" & Chr(13) & _
"Set AA(i).ClrCntrl = IM" & Chr(13) & _
"i = i + 1" & Chr(13) & _
"Next" & Chr(13) & _
"End Sub"
End With
End Sub
|