Làm sao điều khiển các textbox có cùng thuộc tính? (1 người xem)

Liên hệ QC

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

tvquan41

Thành viên chính thức
Tham gia
8/1/11
Bài viết
62
Được thích
4
Cho mình hỏi có cách nào có thể điều khiển các textbox có cùng thuộc tính. VD như ta có 3 textbox: txt1, txt2, txt3
Ví dụ muốn làm cho 3 textbox này hiện lên ta phải làm:
txt1.visible = true
txt2.visible = true
txt3.visible = true
Vậy có cách nào viết code gọi hơn không? Ví dụ như (txt1,txt2,txt3).visible = true
 
VBA yếu hơn VB ở điểm này - trong VBA không tạo được mảng các control, cho nên thường phải viết lệnh riêng cho từng control.
 
Upvote 0
Upvote 0
Cái này Ndu có chiêu dùng Class Module thật tuyệt. Mình chưa tìm lại được.
Ngoài ra, ta có thể đặt tên chúng theo mã hoặc dùng Tag để duyệt và hiệu chỉnh các control theo ý
 
Lần chỉnh sửa cuối:
Upvote 0
Cho mình hỏi có cách nào có thể điều khiển các textbox có cùng thuộc tính. VD như ta có 3 textbox: txt1, txt2, txt3
Ví dụ muốn làm cho 3 textbox này hiện lên ta phải làm:
txt1.visible = true
txt2.visible = true
txt3.visible = true
Vậy có cách nào viết code gọi hơn không? Ví dụ như (txt1,txt2,txt3).visible = true
Có 3 cái TB viết 3 dòng, nếu dùng vòng lặp duyệt qua từng TB có lẽ code sẽ dài hơn chứ không gọn hơn được quá, mình còn yếu VBA nên đoán thế.
 
Upvote 0
Có 3 cái TB viết 3 dòng, nếu dùng vòng lặp duyệt qua từng TB có lẽ code sẽ dài hơn chứ không gọn hơn được quá, mình còn yếu VBA nên đoán thế.
Chưa biết chắc là chỉ có 3 cái, nếu có 3 cái mình gõ tay sướng hơn, khỏi phải tìm kiếm phương pháp khác chi cho mệt.
 
Upvote 0
Cho mình hỏi có cách nào có thể điều khiển các textbox có cùng thuộc tính. VD như ta có 3 textbox: txt1, txt2, txt3
Ví dụ muốn làm cho 3 textbox này hiện lên ta phải làm:
txt1.visible = true
txt2.visible = true
txt3.visible = true
Vậy có cách nào viết code gọi hơn không? Ví dụ như (txt1,txt2,txt3).visible = true
Điều đơn giản nhất là đưa file của bạn lên đây xem thử liệu có "xứng" để tìm cách khác không!
Vậy đi nha!
 
Upvote 0
Điều đơn giản nhất là đưa file của bạn lên đây xem thử liệu có "xứng" để tìm cách khác không!
Vậy đi nha!
Có ngay đây, nhớ là có trên GPE rồi mà tìm chưa ra.
Nhờ NDU viết dùng for để lấy dữ liệu của 3 TxtBox và DTPicker trên vào Arr.
 

File đính kèm

Upvote 0
Có ngay đây, nhớ là có trên GPE rồi mà tìm chưa ra.
Nhờ NDU viết dùng for để lấy dữ liệu của 3 TxtBox và DTPicker trên vào Arr.
Chưa hiểu làm nhưng làm đại:
- Đầu tiên thiết lập Tag Property cho 3 TextBox và DTPicker là 1 chuổi nào đó (chẳng hạn là "arr")
- Xong, chạy code này cho CommandButton OK
PHP:
Private Sub OK_Click()
  Dim Ctrl As Control, i As Long, Arr()
  For Each Ctrl In Me.Controls
    If Ctrl.Tag = "arr" Then
      i = i + 1
      ReDim Preserve Arr(1 To i)
      Arr(i) = Ctrl.Value
    End If
  Next
  Sheet1.Range("A60000").End(xlUp).Offset(1).Resize(, UBound(Arr)).Value = Arr
End Sub
Hoặc cách khác không dựa vào Tag:
PHP:
Private Sub OK_Click()
  Dim Ctrl As Control, i As Long, Arr()
  For Each Ctrl In Me.Controls
    If (TypeOf Ctrl Is MSForms.TextBox) Or (TypeOf Ctrl Is DTPicker) Then
      i = i + 1
      ReDim Preserve Arr(1 To i)
      Arr(i) = Ctrl.Value
    End If
  Next
  Sheet1.Range("A60000").End(xlUp).Offset(1).Resize(, UBound(Arr)).Value = Arr
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Chưa hiểu làm nhưng làm đại:
- Đầu tiên thiết lập Tag Property cho 3 TextBox và DTPicker là 1 chuổi nào đó (chẳng hạn là "arr")
- Xong, chạy code này cho CommandButton OK
PHP:
Private Sub OK_Click()
  Dim Ctrl As Control, i As Long, Arr()
  For Each Ctrl In Me.Controls
    If Ctrl.Tag = "arr" Then
      i = i + 1
      ReDim Preserve Arr(1 To i)
      Arr(i) = Ctrl.Value
    End If
  Next
  Sheet1.Range("A60000").End(xlUp).Offset(1).Resize(, UBound(Arr)).Value = Arr
End Sub
Hoặc cách khác không dựa vào Tag:
PHP:
Private Sub OK_Click()
  Dim Ctrl As Control, i As Long, Arr()
  For Each Ctrl In Me.Controls
    If (TypeOf Ctrl Is MSForms.TextBox) Or (TypeOf Ctrl Is DTPicker) Then
      i = i + 1
      ReDim Preserve Arr(1 To i)
      Arr(i) = Ctrl.Value
    End If
  Next
  Sheet1.Range("A60000").End(xlUp).Offset(1).Resize(, UBound(Arr)).Value = Arr
End Sub
Nhưng mà nó sẽ lấy theo thứ tự nào. Bỏ DTPicker ra.
Vd: TB01=Arr(1) và TBnn=Arr(n)
Ta có 10 TxtBox khi cập nhật thì nó sẽ duyệt qua và cho vào 1 Arr sau đó gán xuống sh cho nhanh. Thay vì Cells(i,1)=TXTBox i
Cám ơn.

Cụ thể như sau
Ta có
ArrTxtBox=Array("TB_Sotien",TB_DienGiai", "TB_GhiChu")
Tương ứng với 03 TxtBox "TB_Sotien",TB_DienGiai","TB_GhiChu"
và có có một rArr(3)
Làm thế nào khi OK thì ghi nhận = vòng lặp.
rArr(1)=TB_SoTien.value
rArr(2)=TB_DienGiai.value
rArr(3)=TB_GhiChu.value
Đại khái như
For i=lbound(ArrTxtBox) to ubound(ArrTxtBox)
rArr(i)=ArrTxtBox(i).value
next i
Còn phần sau thì gán vào.
 
Lần chỉnh sửa cuối:
Upvote 0
Nhưng mà nó sẽ lấy theo thứ tự nào. Bỏ DTPicker ra.
Vd: TB01=Arr(1) và TBnn=Arr(n)
Ta có 10 TxtBox khi cập nhật thì nó sẽ duyệt qua và cho vào 1 Arr sau đó gán xuống sh cho nhanh. Thay vì Cells(i,1)=TXTBox i
Cám ơn.
.

Như mình đã nói ở trên, ThuNghi có thể đánh dấu gì đó vào tag property.. Cụ thể, muốn gán vào Array theo 1 thứ tự nào đó, vậy thì ta có rất nhiều cách. Mình đề xuất 1 cách dễ nhất:
- Cho tất cả các control muốn lấy giá trị vào 1 Frame (cho dễ xử lý)
- Control nào muốn gán vào vị trí đầu tiên của array, ta gán tag của nó số 1... Tương tự thế đến control cuối cùng
- Duyệt qua các control trong frame này. Control nào có tag mang số STT bao nhiêu thì gán vào mảng với STT ấy
Thế thôi!
 
Upvote 0
Web KT

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

Back
Top Bottom