Đặt caption cho nhiều Label (1 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

Candlelight

Thành viên chính thức
Tham gia
23/11/09
Bài viết
55
Được thích
191
Tôi có 1 Form với 20 cái Label, có tên từ Label1 đến Label20, tôi muốn tất cả các Label đó có Caption là "A" khi load Form, tôi làm như sau:

PHP:
Private Sub UserForm_Initialize()
  Dim i As Long
  For i = 1 to 20
      Label(i).Caption = "A"
  Next i
End Sub

Thì báo lỗi.
Tôi phải làm sao mới đúng?
 
Label đâu phải là biến mà là 1 Object mà anh.

Thử code này xem:
PHP:
Private Sub UserForm_Activate()
Dim i As Long, mObject As Object
i = 0
    For Each mObject In Me.Controls
        If mObject = Label Then
            i = i + 1
            mObject.Caption = i & ". ABC"
        End If
    Next mObject
End Sub
Biết Candlelight là ai rồi nha! Vậy mà bày đặt chối.
 
Upvote 0
1. Labels(i) (nếu xài được), thiếu s
2. Label hoặc labels không phải là thuộc tính hoặc vật sở hữu trực tiếp của form. Muốn chỉ đến 1 Label có tên Label1 thì phải dùng Me.Controls("Label1")
3. Nếu trên đời chỉ có 20 Labels và không có thứ gì khác, thì Me.Controls(i) có thể dùng với i = 0 đến 19.
4. Nếu tất cả Label có tên giống nhau chỉ khác số cuối (thí dụ Label1, Label2, ...) thì dùng:

PHP:
Private Sub UserForm_Initialize()
For i = 0 To Me.Controls.Count - 1
      If Left(Me.Controls(i).Name, 5) = "Label" Then Me.Controls(i).Caption = "A"
  Next i
End Sub

5. Sao con gái học VBA nhỉ?
 
Upvote 0
Hai anh Ptm và Ca_dafi đã nêu hai phương pháp chuẩn rồi. Mình nhớ có thuộc tính TypeOf nhưng mình không nhớ sử dụng ra sao.
Thậm chí "chân quê" như thế này cũng được.

Mã:
Private Sub UserForm_Initialize()
Dim i As Integer
For i = 1 To 20
Me.Controls("Label" & i) = "A"
Next
End Sub
Nhưng số lượng lớn các điều khiển trên form thì kiểu du kích này lại có vẻ nhanh hơn nha.

Bổ xung: Nếu như các Code trên đây thì toàn bộ label sẽ bị đổi tên, dễ nảy sinh những Label ngoài ý muốn . Tốt nhất, nên đặt Tag cho các Label muốn đổi tên bằng gì đó. Chẳng hạn là "c". Khi này Code gọn và chính xác hơn

Mã:
Private Sub UserForm_Initialize()
Dim Ctr as Control
For each Ctr in me.Controls
if Ctr.Tag="c" then Ctr.Caption="A"
Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Đúng là các Thầy các Anh siêu sao thật! Mỗi code có một cái hay riêng biệt và ứng dụng riêng biệt!

Trong trường hợp Code của anh Sealand, mình đã ứng dụng vào một cái Form Lịch (code sưu tầm, mình chỉ chuyển sang Tiếng Việt cho vui và thêm một số màu mè), nhờ đó, có thể làm cho Dương Lịch, chuyển qua Âm Lịch (code này cũng sưu tầm luôn). Cái quan trọng là cái ControlTipText mình mã hóa bằng Tiếng Việt, và dùng Code của Anh Sealand để mọi cái Label đều có ControlTipText ứng với ngày Âm Lịch của Dương Lịch!

PHP:
  Dim i, j As Integer
  For i = 1 To 6
  For j = 1 To 7
  Controls("lbl" & i & j).ControlTipText = AmLich(Controls("Lbl" & i & j).Caption & "/" & Month & "/" & Year)
  Next j, i
Cám ơn Anh.

Xin tặng các bạn thích sưu tầm LỊCH ÂM DƯƠNG như mình để tham khảo lúc trà dư tửu hậu!

...5. Sao con gái học VBA nhỉ?

Bác này có tư tưởng "Trọng nam khinh nữ" nhé! hehehehehe
 

File đính kèm

Upvote 0
Cải tiến File Lịch Âm Dương

Cám ơn minhthien321 đã gửi File chia sẻ, rất hay và thú vị, tuy nhiên tôi xin cải tiến File của bạn một chút.
1) Cải tiến lại code: Bạn đặt For i, j ... Next bị thừa và quá nhiều chỗ (5 chỗ) thay vì chỉ một chỗ đã có sẳn:
Bạn dùng code này:
PHP:
Dim i, j As Integer
  For i = 1 To 6
  For j = 1 To 7
  Controls("lbl" & i & j).ControlTipText = AmLich(Controls("Lbl" & i & j).Caption & "/" & Month & "/" & Year)
  Next j, i
2) Cải tiến Form, thay vì bạn dùng ControlTipText để hiển thị, thì tại sao bạn không thêm mỗi cái ngày 1 label thêm cho dễ nhìn, dễ sử dụng, đồng thời cũng thêm vào một ControlTipText vào trong đó cho sinh động?

Tôi đã thêm 42 cái Label để hiển thị ngày Âm lịch và code viết như sau:
PHP:
Private Sub FixDaysInMonth(intStartDay As Integer)
  Dim intRow As Integer
  Dim intCol As Integer
  Dim intNumDays As Integer
  Dim intCount As Integer
  Dim strTemp, strTemp1 As String
  intNumDays = DaysInMonth(Me!Month)
  If Me!Day > intNumDays Then
    Me!Day = intNumDays
  End If
  intCount = 0
  For intRow = 1 To 6
    For intCol = 1 To 7
      If (intRow = 1) And (intCol < intStartDay) Then
          Me("lbl1" & intCol).Visible = False
          Me("AL1" & intCol).Visible = False '(them o day)
      Else
        intCount = intCount + 1
        strTemp = "lbl" & intRow & intCol
        strTemp1 = "AL" & intRow & intCol '(them o day)
        With Me(strTemp)
          If intCount <= intNumDays Then
            If Not .Visible Then
              .Visible = True
              If .Visible = True Then Me(strTemp1).Visible = True '(them o day)
            End If
            .Caption = intCount
            .ControlTipText = AmLich(.Caption & "/" & Month & "/" & Year) '(them o day)
            Me(strTemp1).Caption = NgayAL(.Caption & "/" & Month & "/" & Year) '(them o day)
          Else
            If .Visible Then
              .Visible = False
              If .Visible = False Then Me(strTemp1).Visible = False '(them o day)
            End If
          End If
        End With
      End If
    Next intCol
  Next intRow
End Sub

attachment.php


Hy vọng tiếp tục được các Sư Phụ, các Thầy, các Anh và các bạn tiếp tục cải tiến và hoàn thiện! Cám ơn rất nhiều!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Label đâu phải là biến mà là 1 Object mà anh.

Biết Candlelight là ai rồi nha! Vậy mà bày đặt chối.

"Chài ai là chài", nghĩ sao anh Ca đẹp trai lại gọi em bằng Anh vậy "chài"! Nghĩ chơi anh Hoàng Tử đẹp trai ra luôn, bo bo xì. Hoàng tử xấu xí!

@Learning_Excel: Anh cải tiến thì cải tiến luôn cho các ngày thứ Tư, Năm, Sáu, Bảy có dấu luôn cho roài, để vậy thấy nửa nạc nửa mỡ quá! hihihi
 
Upvote 0
@Learning_Excel: Anh cải tiến thì cải tiến luôn cho các ngày thứ Tư, Năm, Sáu, Bảy có dấu luôn cho roài, để vậy thấy nửa nạc nửa mỡ quá! hihihi

Tôi nghĩ là bạn làm được mà Can??? Dễ mà!
Bước 1: Bạn xóa hoặc đặt các const này trong dấu nháy (')
PHP:
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hWnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
'*********************************************************************************************
'*********************************************************************************************
..........................
 
'Const adhcSun = "CN"
'Const adhcMon = "HAI"
'Const adhcTue = "BA"
'Const adhcWed = "TU"
'Const adhcThu = "NAM"
'Const adhcFri = "SAU"
'Const adhcSat = "BAY"
'......................

Bước 2: Bạn chuyển đổi ở chỗ FORM_OPEN này thành:
PHP:
Private Sub Form_Open()
  mvarMonthLen = Array(0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31)
  mastrDays(1) = "CN" 'adhcSun
  mastrDays(2) = "HAI" 'adhcMon
  mastrDays(3) = "BA" 'adhcTue
  mastrDays(4) = Evaluate("TU") 'adhcWed
  mastrDays(5) = Evaluate("NAM") 'adhcThu
  mastrDays(6) = "SÁU" 'adhcFri
  mastrDays(7) = Evaluate("BAY") 'adhcSat
'..........................

Như vậy đã như ý bạn chưa???

Nhưng thêm cho bạn một tí nữa là tại lbMonth thì có Tháng MM mà lbYear thì chỉ có số thôi, thêm vào chữ NĂM YYYY:
PHP:
Private Sub SetDisplayDate()
  Me!LbMonth = "THÁNG " & Format(Me!Month, "00") 'GetMonthName(Me!Month)
  Me!LbYear = Evaluate("NAM") & " " & Me!Year
End Sub

Rồi, việc còn lại là bạn chỉ việc điều chỉnh kích cở của lbMonth và lbYear cho thấy được Tháng MMNĂM YYYY thôi.
Mình học được chiêu ẩn Caption của Form và Evaluate này từ Thầy NDU đấy! Thích thật!


rmm.contents.raw
 
Lần chỉnh sửa cuối:
Upvote 0
Chào các bạn, xin hãy hoàn chỉnh dùm mình hàm TransSolar được không vậy?

Mình không thể chuyển từ ngày âm lịch sang dương lịch được, lúc nào cũng có lỗi hết :(
 
Upvote 0
Sao không ai giúp thế nhỉ :(

Bạn vào đường dẫn dưới đây và tải Addins về, tôi tình cờ biết nó, hình như VBA bị cấm vào, nhưng thôi, nếu bạn ứng dụng thì được rồi.

http://www.mediafire.com/download.php?hktjqjymm0y

Trong Addins này bao gồm:

Đọc số thành chữ tự động nhận dạng bảng mã

Đổi sổ tự động nhận dạng bảng mã, đổi dương lịch sang âm lịch và ngược lại.
- Đổi số: =docso(A1) (A1 là địa chỉ của cell có con số cần đọc thành chữ)
- Đổi số USD: =docsoUSD(A1) (A1 là địa chỉ của cell có con số cân đọc thành chữ)
- Đổi ra âm lịch: =Amlich(A1) (A1 là địa chỉ của cell có ngày dương lịch)
- Đổi ra dương lịch: =duonglich(A1) (A1 là địa chỉ của cell có ngày âm lịch)

=================================================

P/s: Tôi ngại tác giả của File này xóa đi nên tôi tải về và post hẳn lên đây luôn cho mọi người xem.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Bạn vào đường dẫn dưới đây và tải Addins về, tôi tình cờ biết nó, hình như VBA bị cấm vào, nhưng thôi, nếu bạn ứng dụng thì được rồi.

http://www.mediafire.com/download.php?hktjqjymm0y

Trong Addins này bao gồm:

Đọc số thành chữ tự động nhận dạng bảng mã

Đổi sổ tự động nhận dạng bảng mã, đổi dương lịch sang âm lịch và ngược lại.
- Đổi số: =docso(A1) (A1 là địa chỉ của cell có con số cần đọc thành chữ)
- Đổi số USD: =docsoUSD(A1) (A1 là địa chỉ của cell có con số cân đọc thành chữ)
- Đổi ra âm lịch: =Amlich(A1) (A1 là địa chỉ của cell có ngày dương lịch)
- Đổi ra dương lịch: =duonglich(A1) (A1 là địa chỉ của cell có ngày âm lịch)

Tiếc quá nếu vào được bên trong thì hay quá.

Bạn có thể giải thích dùm mình hàm RowBOT(sh) và RowEOT(sh) trong file bạn gửi được ko, mình không hiểu cách làm

Cám ơn bạn thêm lần nữa ^_^
 
Upvote 0
Đúng là các Thầy các Anh siêu sao thật! Mỗi code có một cái hay riêng biệt và ứng dụng riêng biệt!

Trong trường hợp Code của anh Sealand, mình đã ứng dụng vào một cái Form Lịch (code sưu tầm, mình chỉ chuyển sang Tiếng Việt cho vui và thêm một số màu mè), nhờ đó, có thể làm cho Dương Lịch, chuyển qua Âm Lịch (code này cũng sưu tầm luôn). Cái quan trọng là cái ControlTipText mình mã hóa bằng Tiếng Việt, và dùng Code của Anh Sealand để mọi cái Label đều có ControlTipText ứng với ngày Âm Lịch của Dương Lịch!

PHP:
  Dim i, j As Integer
  For i = 1 To 6
  For j = 1 To 7
  Controls("lbl" & i & j).ControlTipText = AmLich(Controls("Lbl" & i & j).Caption & "/" & Month & "/" & Year)
  Next j, i
Cám ơn Anh.

Xin tặng các bạn thích sưu tầm LỊCH ÂM DƯƠNG như mình để tham khảo lúc trà dư tửu hậu!


Gần tết rồi, muốn có một form lịch đây! Cũng từ form này ta thây thế được cái control Calendar có sẳn của Excel vì nó thân thiện. Tuy nhiên với cái form này nó có 1 hạn chế là không chọn được tháng hoặc năm bất kỳ như Calendar của Excel. Thêm 2 cái combobox cho Tháng và Năm sẽ như thế nào, xin các cao thủ sửa code để cho nó tiện ích hơn.

Xin được các cao thủ ra tay!
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom