Dim LabelCount1 As Integer
Option Explicit
Public cLabel() As New clsLabel
Dim LabelCount1 As Integer
Cảm ơn anh đã giúp đỡ. Tuy nhiên khi Click vào frame khác thì Frame cũ sẽ bị mất màu vàng đánh dấu. Mong anh quy hoạch lại 1 tý file trên được không ạ. Trình viết code em gà lắm. Em xin cảm ơn ạThử sửa thế này
Di chuyển dòng sau (trong sub Sub TaoListFrame ...)
ra ngoài thành biến toàn cụcMã:Dim LabelCount1 As Integer
Mã:Option Explicit Public cLabel() As New clsLabel Dim LabelCount1 As Integer
Nhưng: code của bạn tôi không hiểu cứ loằng ngoằng thế nào ý, sao không nên đặt luôn 1 frame là 1 class chính. Lập trình class nên rõ ràng mạch lạc về đối tượng không thì dễ rối.
Cảm ơn anh đã giúp đỡ. Tuy nhiên khi Click vào frame khác thì Frame cũ sẽ bị mất màu vàng đánh dấu. Mong anh quy hoạch lại 1 tý file trên được không ạ. Trình viết code em gà lắm. Em xin cảm ơn ạ
Sub Farbe(vLB As MSForms.Label)
Dim CB As Control
'For Each CB In Fahrer.Controls
For Each CB In vLB.Parent.Controls ' Fahrer.Controls
If TypeName(CB) = "Label" Then CB.BackColor = &HFFFFFF
Next CB
End Sub
Farbe Label
Chỗ này em cũng chưa hiểu lắm. Giả sử file của em có 5 form, mỗi form 5 cái frame thì sinh ra quá nhiều class. Vậy nên em muốn chỉ 1 class để sử dụng được nhiều frame. Mong anh hướng dẫn thêmNhưng: code của bạn tôi không hiểu cứ loằng ngoằng thế nào ý, sao không nên đặt luôn 1 frame là 1 class chính. Lập trình class nên rõ ràng mạch lạc về đối tượng không thì dễ rối.
Chỗ này em cũng chưa hiểu lắm. Giả sử file của em có 5 form, mỗi form 5 cái frame thì sinh ra quá nhiều class. Vậy nên em muốn chỉ 1 class để sử dụng được nhiều frame. Mong anh hướng dẫn thêm
Mong anh giúp em 1 ví dụ nhỏ được không ạ. Cái này em hiểu mơ hồ lắm. Em cảm ơnTôi nghĩ bạn nên dùng Class collection. Khai báo class cho từng Frame (tất nhiên là chỉ thiết kế 1 class frame) và đưa vào Collection.
Không hiểu sao không viết chân phương đi. Từ cơ bản 1Mong anh giúp em 1 ví dụ nhỏ được không ạ. Cái này em hiểu mơ hồ lắm. Em cảm ơn
Mong anh giúp em 1 ví dụ nhỏ được không ạ. Cái này em hiểu mơ hồ lắm. Em cảm ơn
Option Explicit
Private mFrm As MSForms.UserForm
Private WithEvents mLabelMN As MSForms.Label 'Menu label
Private blnRet As Boolean
Public Property Set ParentForm(form As Object)
Set mFrm = form
End Property
Public Property Set MenuLabel(lbl As MSForms.Label)
Set mLabelMN = lbl
End Property
Public Property Get MenuLabel() As MSForms.Label
Set MenuLabel = mLabelMN
End Property
Private Sub mLabelMN_Click()
Dim ctl As Control
Dim sFraName As String
'Xoa highligh Label cu da click chon trong Frame
sFraName = mLabelMN.Parent.Name
For Each ctl In mFrm.Controls(sFraName).Controls
If TypeName(ctl) = "Label" Then ctl.BackColor = &HFFFFFF
Next
mLabelMN.BackColor = &HFFFF&
Application.Run "modMain.ExecuteMenu", mLabelMN.Caption
End Sub
Option Explicit
Dim LabelCount1 As Integer
Dim cSelLabel As clsHighlighLabel
Public colLabels As New Collection
Sub TaoListFrame(fra As MSForms.Frame, sArr As Variant)
Dim LB As Control
Dim LabelCount1 As Integer
Dim i As Long
Dim t As Long
t = 0
For i = 1 To UBound(sArr)
Set cSelLabel = New clsHighlighLabel
Set LB = fra.Add("Forms.Label.1", "lbl_" & i, True)
With LB
.Top = t
.Left = 0
.Width = 200
.Caption = sArr(i, 1)
'.ForeColor = Range("A" & i).Font.Color
.Font.Size = 12
End With
LabelCount1 = LabelCount1 + 1
Set cSelLabel.ParentForm = Fahrer
Set cSelLabel.MenuLabel = LB
colLabels.Add cSelLabel
t = t + 18
Next i
fra.ScrollHeight = LabelCount1 * 18
End Sub
Public Sub ExecuteMenu(strMenuName As String)
MsgBox "Ban dang chay menu: " & strMenuName
End Sub
Option Explicit
Private Sub CommandButton1_Click()
Unload Me
Set colLabels = Nothing
End Sub
Private Sub UserForm_Initialize()
Dim MyArr As Variant
MyArr = Sheet1.Range("A8:A" & Sheet1.Range("A65536").End(3).Row)
TaoListFrame Frame1, MyArr
MyArr = Sheet1.Range("B8:B" & Sheet1.Range("B65536").End(3).Row)
TaoListFrame Frame2, MyArr
MyArr = Sheet1.Range("C8:C" & Sheet1.Range("C65536").End(3).Row)
TaoListFrame Frame3, MyArr
End Sub
DIỄN ĐÀN GIẢI PHÁP EXCEL