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

Liên hệ QC

phanminhphuong

Thành viên hoạt động
Tham gia
26/7/13
Bài viết
127
Được thích
68
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

  • Multipage.xls
    50.5 KB · Đọc: 12
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

  • Multipage.xls
    54.5 KB · Đọc: 17
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

  • Multipage.xls
    43.5 KB · Đọc: 2
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

  • Multipage.xls
    48.5 KB · Đọc: 14
Lần chỉnh sửa cuối:
Upvote 0
Web KT
Back
Top Bottom