VBA Control Properties table value

Liên hệ QC

nhocxboy

Thành viên mới
Tham gia
4/7/15
Bài viết
14
Được thích
6
Giới tính
Nam
Nghề nghiệp
Kỹ sư cơ khí(Toshiba company)
Cho em hỏi xíu với ạ.
Em đang muốn tập tành Excel VBA.
Có cái này em thắc mắc ạ. mong mn giúp em.
Cái bảng Properties (Hình đính kèm) : Theo em hiểu là thông tin về các thuộc tính của một đối tượng nào đó.
Thường thì chúng ta sẽ : 1 là input các giá trị vào các ô đó hoặc 2 là dùng code để khai báo thuộc tính đó có giá trị = bao nhiêu luôn.

Em ví dụ thế này: em có 1 đối tượng là "Label1" và em muốn caption của nó là "Anh yêu em"

Em sẽ dùng 2 cách để hiện thị là:
C1: Label1.caption = "Anh yêu em"
C2: Em nhập hẳn chữ "Anh yêu em" vào ô Caption trong bảng Properties luôn.

Câu hỏi của em là : Có code nào để gán giá trị "Anh yêu em" vào bảng đó không? nghĩa là không sử dụng 2 cách trên.
 

File đính kèm

  • Capture.PNG
    Capture.PNG
    22.3 KB · Đọc: 9
Ngoài việc thay đổi thuộc tính Caption của Label trong cửa sổ Properties bằng tay thì có thể dùng code. Nhưng code như thế chỉ chạy được khi Form mà trên đó có label không được phép hiển thị khi code chạy. Tức nếu vd. bạn có UserForm1 và UserForm2, và trên UserForm1 có label tên là "Lalala". Bạn có thể viết code, vd. sub Test, để thay đổi Caption của Lalala trong Properties. Bạn có thể gán macro Test cho 1 Button trên sheet, hoặc Button trên sheet hiển thị UserForm2, còn CommandButton1 trên UserForm2 chạy sub Test. Trong cả 2 trường hợp khi chạy code Test thì UserForm1 không hiển thị.
 
Ngoài việc thay đổi thuộc tính Caption của Label trong cửa sổ Properties bằng tay thì có thể dùng code. Nhưng code như thế chỉ chạy được khi Form mà trên đó có label không được phép hiển thị khi code chạy. Tức nếu vd. bạn có UserForm1 và UserForm2, và trên UserForm1 có label tên là "Lalala". Bạn có thể viết code, vd. sub Test, để thay đổi Caption của Lalala trong Properties. Bạn có thể gán macro Test cho 1 Button trên sheet, hoặc Button trên sheet hiển thị UserForm2, còn CommandButton1 trên UserForm2 chạy sub Test. Trong cả 2 trường hợp khi chạy code Test thì UserForm1 không hiển thị.
Cảm ơn bạn vì đã phản hồi.
Mình hơi mơ hồ về cách diễn tả của bạn.
Bạn có thể làm thử code "test macro" mà bạn nói không. Mình chưa hình dung ra cách khai báo để đưa giá trị đó vào properties.
Cảm ơn bạn.
 
Cảm ơn bạn vì đã phản hồi.
Mình hơi mơ hồ về cách diễn tả của bạn.
Bạn có thể làm thử code "test macro" mà bạn nói không. Mình chưa hình dung ra cách khai báo để đưa giá trị đó vào properties.
Cảm ơn bạn.
Mơ hồ gì bạn? Tôi viết rõ mà.

Tôi nói là có thể viết, ít ra là tôi chỉ có thể viết, macro Test, mà đoạn code đó làm cái bạn muốn. Nhưng tôi lưu ý là macro đó không chạy, hay nói cách khác là chạy bị lỗi, khi mà UserForm1 đang hiển thị. Tức nếu bạn có trên UserForm1 nút CommandButton1 với code
Mã:
Private Sub CommandButton1_Click()
    Test ...
End Sub
thì sau khi hiển thị UserForm1 và nhấn CommandButton1 thì sẽ có lỗi vì code chạy khi UserForm1 đang hiển thị.

Trong tập tin đính kèm bạn có thể chạy code bằng cách nhấn nút "Chạy sub test" (chạy macro test), hoặc bằng cách nhấn nút "Hiển thị UserForm2" (hiển thị UserForm2) rồi tiếp theo nhấn CommandButton1 (chạy macro test). Trong cả 2 trường hợp UserForm1, mà trên đó code cần thao tác, đều không hiển thị khi chạy code test.

Để chạy code không bị lỗi thì phải thiết lập nếu bạn chưa thiết lập: nhấn menu File -> Options -> Trust Center -> Trust Center Settings ... -> Macro Settings -> ở nửa bên phải đánh dấu để chọn "Trust asscess to the VBA project object model" -> OK -> OK
 

File đính kèm

  • Book1.xlsm
    21.9 KB · Đọc: 4
Lần chỉnh sửa cuối:
Mơ hồ gì bạn? Tôi viết rõ mà.

Tôi nói là có thể viết, ít ra là tôi chỉ có thể viết, macro Test, mà đoạn code đó làm cái bạn muốn. Nhưng tôi lưu ý là macro đó không chạy, hay nói cách khác là chạy bị lỗi, khi mà UserForm1 đang hiển thị. Tức nếu bạn có trên UserForm1 nút CommandButton1 với code
Mã:
Private Sub CommandButton1_Click()
    Test ...
End Sub
thì sau khi hiển thị UserForm1 và nhấn CommandButton1 thì sẽ có lỗi vì code chạy khi UserForm1 đang hiển thị.

Trong tập tin đính kèm bạn có thể chạy code bằng cách nhấn nút "Chạy sub test" (chạy macro test), hoặc bằng cách nhấn nút "Hiển thị UserForm2" (hiển thị UserForm2) rồi tiếp theo nhấn CommandButton1 (chạy macro test). Trong cả 2 trường hợp UserForm1, mà trên đó code cần thao tác, đều không hiển thị khi chạy code test.

Để chạy code không bị lỗi thì phải thiết lập nếu bạn chưa thiết lập: nhấn menu File -> Options -> Trust Center -> Trust Center Settings ... -> Macro Settings -> ở nửa bên phải đánh dấu để chọn "Trust asscess to the VBA project object model" -> OK -> OK
Cảm ơn bạn. về cái lưu ý đấy.
Mình hiểu ý bạn nói rồi.
Thank you for your help.

Đây là đoàn code mình cần. (ngâm cứu nhiều mà không biết phải viết thế nào để điền vào.)

Mã:
Sub WriteLabelCaption(ByVal formName As String, ByVal labelName As String, ByVal newLabelCaption As String)
Dim form As Object, lb As MSForms.Control
    Set form = ThisWorkbook.VBProject.VBComponents(formName)
    Set lb = form.Designer.Controls(labelName)
    lb.Object.Caption = newLabelCaption
    Set lb = Nothing
    Set form = Nothing
End Sub

Sub test()
    WriteLabelCaption "UserForm1", "Lalala", "Anh y" & ChrW(234) & "u em nhieu lam"
End Sub
 
Web KT
Back
Top Bottom