Đổi tên ConTrols theo tên từ bảng tính ? (1 người xem)

Liên hệ QC

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

TrungChinhs

Thành viên tích cực
Tham gia
18/2/08
Bài viết
1,475
Được thích
2,470
Nghề nghiệp
Công chức
Khi tạo 1 Label thì (Name) mặc định là Label1 muốn đổi tên theo tên từ bảng tính thì code viết như thế nào. Tôi viết code này nhưng không được. Nhờ các bạn xem giúp ?

Thanks!

Code đổi tên (Name) và nhãn (Caption) từ tên trên bảng tính.
Mã:
Sub Controls_Name_Caption()
    On Error Resume Next
    n = 2
    For Each Cts In UserForm1.Controls
        Cts.Name = ShConTrols.Range("c" & n).Value
        Cts.Caption = ShConTrols.Range("d" & n).Value
        n = n + 1
    Next
End Sub

Code lấy tên (Name) và nhãn (Caption) ra bảng tính.
Mã:
Sub ListName_Controls()
    On Error Resume Next
    ShConTrols.[c:d].ClearContents
    For Each Cts In UserForm1.Controls
        ShConTrols.[c1000].End(3)(2) = Cts.Name
        ShConTrols.[c1000].End(3)(1, 2) = Cts.Caption
    Next
End Sub
 

File đính kèm

Lần chỉnh sửa cuối:
Khi tạo 1 Label thì (Name) mặc định là Label1 muốn đổi tên theo tên từ bảng tính thì code viết như thế nào. Tôi viết code này nhưng không được. Nhờ các bạn xem giúp ?

Thanks!

Code đổi tên (Name) và nhãn (Caption) từ tên trên bảng tính.
Mã:
Sub Controls_Name_Caption()
    On Error Resume Next
    n = 2
    For Each Cts In UserForm1.Controls
        Cts.Name = ShConTrols.Range("c" & n).Value
        Cts.Caption = ShConTrols.Range("d" & n).Value
        n = n + 1
    Next
End Sub

Code lấy tên (Name) và nhãn (Caption) ra bảng tính.
Mã:
Sub ListName_Controls()
    On Error Resume Next
    ShConTrols.[c:d].ClearContents
    For Each Cts In UserForm1.Controls
        ShConTrols.[c1000].End(3)(2) = Cts.Name
        ShConTrols.[c1000].End(3)(1, 2) = Cts.Caption
    Next
End Sub

Làm vậy đâu có được anh!
Làm vầy đây:
- Giả sử tại C1:C10 anh gõ tên các control trên UserForm1
- Tại D1:D10 là tên mới anh muốn đặt
- Giờ là code:
Mã:
Private Sub NamedCtrls(ByVal ufCap As String, ByVal OldName, ByVal NewName)
  Dim tmpOld, tmpNew
  Dim n As Long
  tmpOld = OldName: tmpNew = NewName
  For n = LBound(tmpOld) To UBound(tmpNew)
    ThisWorkbook.VBProject.VBComponents(ufCap).Designer.Controls(tmpOld(n)).Name = tmpNew(n)
  Next
End Sub
Mã:
Sub Main()
  Dim OldName, NewName, ufCap As String
  ufCap = "UserForm1"
  With WorksheetFunction
    OldName = .Transpose(Range("C1:C10"))
    NewName = .Transpose(Range("D1:D10"))
  End With
  NamedCtrls ufCap, OldName, NewName
End Sub
 

File đính kèm

Upvote 0
Khi tạo 1 Label thì (Name) mặc định là Label1 muốn đổi tên theo tên từ bảng tính thì code viết như thế nào. Tôi viết code này nhưng không được. Nhờ các bạn xem giúp ?

Thanks!

Code đổi tên (Name) và nhãn (Caption) từ tên trên bảng tính.
Mã:
Sub Controls_Name_Caption()
    On Error Resume Next
    n = 2
    For Each Cts In UserForm1.Controls
        Cts.Name = ShConTrols.Range("c" & n).Value
        Cts.Caption = ShConTrols.Range("d" & n).Value
        n = n + 1
    Next
End Sub

Code lấy tên (Name) và nhãn (Caption) ra bảng tính.
Mã:
Sub ListName_Controls()
    On Error Resume Next
    ShConTrols.[c:d].ClearContents
    For Each Cts In UserForm1.Controls
        ShConTrols.[c1000].End(3)(2) = Cts.Name
        ShConTrols.[c1000].End(3)(1, 2) = Cts.Caption
    Next
End Sub
Code trên về cơ bản không có vấn đề gì, anh thử thêm câu lệnh MoUseForm vào cuối sub Controls_Name_Caption sẽ thấy điều này, chỉ có vấn đề ở chỗ là tên của các Control (thuộc tính Name - trong code là Cts.Name) sẽ không được thay đổi khi đang chạy code. Anh thử bỏ câu lệnh On Error Resume Next trong sub này sẽ thấy hộp thoại báo lỗi như sau:
Runtime Error.png
Đọc nội dung hộp thoại này sẽ thấy rằng khi thực hiện code thì không thể thay đổi thuộc tính Name của Control được, và em nghĩ điều này cũng dễ hiểu: Nếu cho phép đổi tên của Control thì nếu ta cần can thiệp đến Control đó, ta sẽ phải gọi tên nó như thế nào?
 
Upvote 0
Làm vậy đâu có được anh!
Làm vầy đây:
- Giả sử tại C1:C10 anh gõ tên các control trên UserForm1
- Tại D1:D10 là tên mới anh muốn đặt
- Giờ là code:
Mã:
Private Sub NamedCtrls(ByVal ufCap As String, ByVal OldName, ByVal NewName)
  Dim tmpOld, tmpNew
  Dim n As Long
  tmpOld = OldName: tmpNew = NewName
  For n = LBound(tmpOld) To UBound(tmpNew)
    ThisWorkbook.VBProject.VBComponents(ufCap).Designer.Controls(tmpOld(n)).Name = tmpNew(n)
  Next
End Sub
Mã:
Sub Main()
  Dim OldName, NewName, ufCap As String
  ufCap = "UserForm1"
  With WorksheetFunction
    OldName = .Transpose(Range("C1:C10"))
    NewName = .Transpose(Range("D1:D10"))
  End With
  NamedCtrls ufCap, OldName, NewName
End Sub

Cảm ơn Ndu! Chả là mình lấy được tên của nó ra ngoài bảng tính nên nghĩ là làm ngược lại thì đổi được tên, loay hoay cả ngày hôm nay không được nên mới gửi bài hỏi ai dè phức tạp ghê.
 
Upvote 0

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

Back
Top Bottom