[Hỏi] Viết Code cho sự kiện AfterUpdate() hoặc Change() của hàng loạt TextBox (1 người xem)

Liên hệ QC

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

phanminhphuong

Thành viên hoạt động
Tham gia
26/7/13
Bài viết
127
Được thích
69
Chào các bạn
Mình có 1 form Multipage như ví dụ.
- Trên Page1 & Page2 có rất nhiều TextBox (Khoảng 22 Textbox/page)
- Tên của Textbox trên Page2 thêm "_2" so với tên của Textbox trên Page1
Làm sao viết code (hoặc dùng Class???) chứ chẳng nhẽ lại viết 22 TextBox_AfterUpdate

Ý mình là viết thế nào đc dạng tổng quát:
Private Sub TextBoxZ_AfterUpdate()
TextBoxZ_2 = TextBoxZ '(Z: tên Textbox bất kì ko phải là số)
End Sub

(Page2 có những nội dung tương đương page1 và có những nội dung gần tương đương chỉ sửa 1 vài kí tự là ok nên mới cần sự kiện AfterUpdate của hàng loạt Textbox ở Page1)
 

File đính kèm

Chào các bạn
Mình có 1 form Multipage như ví dụ.
- Trên Page1 & Page2 có rất nhiều TextBox (Khoảng 22 Textbox/page)
- Tên của Textbox trên Page2 thêm "_2" so với tên của Textbox trên Page1
Làm sao viết code (hoặc dùng Class???) chứ chẳng nhẽ lại viết 22 TextBox_AfterUpdate

Ý mình là viết thế nào đc dạng tổng quát:
Private Sub TextBoxZ_AfterUpdate()
TextBoxZ_2 = TextBoxZ '(Z: tên Textbox bất kì ko phải là số)
End Sub

(Page2 có những nội dung tương đương page1 và có những nội dung gần tương đương chỉ sửa 1 vài kí tự là ok nên mới cần sự kiện AfterUpdate của hàng loạt Textbox ở Page1)
Cách làm:
1> Chèn 1 Class Module với tên clstxtEvent và code:
Mã:
Public WithEvents tbox As MSForms.TextBox
Private Sub tbox_Change()
  UserForm1.Controls(tbox.Name & "_2").Text = tbox.Text
End Sub
2> Code trong UserForm1
Mã:
Dim obj() As New clstxtEvent
Private Sub UserForm_Initialize()
  Dim ctrl As Control, n As Long
  For Each ctrl In Me.MultiPage1.Pages(0).Controls
    If TypeOf ctrl Is MSForms.TextBox Then
      n = n + 1
      ReDim Preserve obj(1 To n)
      Set obj(n).tbox = ctrl
    End If
  Next
End Sub
Xong!
 

File đính kèm

Upvote 0
Cách làm:
1> Chèn 1 Class Module với tên clstxtEvent và code:
Mã:
Public WithEvents tbox As MSForms.TextBox
Private Sub tbox_Change()
  UserForm1.Controls(tbox.Name & "_2").Text = tbox.Text
End Sub
2> Code trong UserForm1
Mã:
Dim obj() As New clstxtEvent
Private Sub UserForm_Initialize()
  Dim ctrl As Control, n As Long
  For Each ctrl In Me.MultiPage1.Pages(0).Controls
    If TypeOf ctrl Is MSForms.TextBox Then
      n = n + 1
      ReDim Preserve obj(1 To n)
      Set obj(n).tbox = ctrl
    End If
  Next
End Sub
Xong!

Làm phiền mọi người giúp 1 tí nữa. Xin lỗi vì đã không đưa ra trường hợp tổng quát:
VD ở trên
+ Page1 có 8 textbox, Page2 cũng có 8 textbox nhưng chỉ có 7 textbox đầu là tương ứng tức là cần sự kiện Change(). Textbox8 ko có sự kiện change (và Page2 cũng ko có Textbox8_2) thì báo lỗi ngay khi mình muốn nhập vào textbox8
+ Vậy phải viết code thế nào nếu vẫn dùng Class mà 7 textbox có sự kiện change (textbox nào có 1 textbox tương ứng tên là textbox_2 thì có sự kiện change) ko thì thôi? chẳng nhẽ lại dùng On Error Resume Next. Hic
 

File đính kèm

Upvote 0
Làm phiền mọi người giúp 1 tí nữa. Xin lỗi vì đã không đưa ra trường hợp tổng quát:
VD ở trên
+ Page1 có 8 textbox, Page2 cũng có 8 textbox nhưng chỉ có 7 textbox đầu là tương ứng tức là cần sự kiện Change(). Textbox8 ko có sự kiện change (và Page2 cũng ko có Textbox8_2) thì báo lỗi ngay khi mình muốn nhập vào textbox8
+ Vậy phải viết code thế nào nếu vẫn dùng Class mà 7 textbox có sự kiện change (textbox nào có 1 textbox tương ứng tên là textbox_2 thì có sự kiện change) ko thì thôi? chẳng nhẽ lại dùng On Error Resume Next. Hic

Thiếu gì cách:
- Đặt tên cho 7 textbox theo cách đặc biệt nào đó (cả 2 page)
- Đánh dấu vào Tag property 1 ký hiệu gì đó
Ví dụ tôi chọn cách 2 và đánh dấu vào tag cho 7 textbox đầu tiên là chữ "mark" chẳng hạn.

Untitled.jpg























Vậy tôi sẽ sửa code trong UserFom thành:
Mã:
Dim obj() As New clstxtEvent
Private Sub UserForm_Initialize()
  Dim ctrl As Control, n As Long
  For Each ctrl In Me.MultiPage1.Pages(0).Controls
    If TypeOf ctrl Is MSForms.TextBox Then
     [COLOR=#ff0000] If ctrl.Tag = "mark" Then[/COLOR]
        n = n + 1
        ReDim Preserve obj(1 To n)
        Set obj(n).tbox = ctrl
     [COLOR=#ff0000] End If[/COLOR]
    End If
  Next
End Sub
những chổ khác để nguyên
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom