Truy cập TextBox

Liên hệ QC

minhsondaklak

Thành viên mới
Tham gia
21/11/07
Bài viết
29
Được thích
41
Truy cập TextBox gián tiếp

Mình mới học VBA, xin nhờ các Huynh giúp cho 1 tình huống:

Có biến str = "tb1" (str là biến kiểu string)
Có textbox với name là "tb1"
Có cách nào truy cập tb1 (đọc ghi dữ liệu vào textbox) thông qua biến str được không ?
Mong các Huynh chỉ giúp, xin cám ơn.
 
Lần chỉnh sửa cuối:
minhsondaklak đã viết:
Mình mới học VBA, xin nhờ các Huynh giúp cho 1 tình huống:

Có biến str = "tb1" (str là biến kiểu string)
Có textbox với name là "tb1"
Có cách nào truy cập tb1 (đọc ghi dữ liệu vào textbox) thông qua biến str được không ?

Bạn dùng Code sau:

PHP:
Private Sub UserForm_Initialize()
  Dim txtStr As String
  txtStr = "Show me in Textbox"
  Me.tb1.Text = txtStr
End Sub
 
Upvote 0
dat2007 đã viết:
Bạn dùng Code sau:

PHP:
Private Sub UserForm_Initialize()
  Dim txtStr As String
  txtStr = "Show me in Textbox"
  Me.tb1.Text = txtStr
End Sub
Hình như ý của bạn ấy là :
PHP:
 Private Sub UserForm_Initialize()
     Dim Str As String
     Str = "tb1"
     Me.Str.Text = "ABC gì đó"
End Sub
Mình VD thôi chứ đây không phải là code đúng.
Thân!
 
Upvote 0
Truy cập textbox trên form

Xin chào và cám ơn các Huynh đã quan tâm !

Ý của mình muốn truy cập vào một textbox nhưng không dùng trực tiếp tên của textbox mà dùng biến str chứa tên của textbox đó (truy cập gián tiếp thông qua biến str).

Cụ thể là mình có làm một ứng dụng nhỏ trên VBA của Excel97. Trong đó mình gặp tình huống cần duyệt qua tất cả các textbox trên 1 form, trong vòng lặp For...Next (và chỉ duyệt textbox thôi, không duyệt các control loại khác trên form đó).
Nhưng chưa biết phải làm sao ? sử dụng biến kiểu gì trong vòng lặp For ... Next để biến này đại diện cho mỗi textbox khi qua 1 vòng lặp.
 
Lần chỉnh sửa cuối:
Upvote 0
minhsondaklak đã viết:
...
Cụ thể là mình có làm một ứng dụng nhỏ trên VBA của Excel97. Trong đó mình gặp tình huống cần duyệt qua tất cả các textbox trên 1 form, trong vòng lặp For...Next (và chỉ duyệt textbox thôi, không duyệt các control loại khác trên form đó).
Nhưng chưa biết phải làm sao ? sử dụng biến kiểu gì trong vòng lặp For ... Next để biến này đại diện cho mỗi textbox khi qua 1 vòng lặp.

Tạo 1 UserForm, 1 nút lệnh CommandButton và vài TextBox
Bạn sử dụng vòng lặp For Each ... Next để duyệt các đối tượng là Textbox. Code như sau:
Mã:
Option Explicit
'
Private Sub CommandButton1_Click()
Dim objObject
For Each objObject In UserForm1.Controls
    If UCase(TypeName(objObject)) = "TEXTBOX" Then
        'Su ly cac dong lenh o day
        MsgBox objObject.Name
        '.....
    End If
Next objObject
End Sub
 
Upvote 0
minhsondaklak đã viết:
Ý của mình muốn truy cập vào một textbox nhưng không dùng trực tiếp tên của textbox mà dùng biến str chứa tên của textbox đó (truy cập gián tiếp thông qua biến str).
Biến str là string không thể thay thế cho TetBox được. Ngoài cách của nvson truy cập tên đối tượng, bạn có thể dùng điều khiển Control(n) để truy cập đến TextBox thứ n.
Ví dụ bạn có 3 TextBox1, TextBox2, TextBox3 và thứ tự Control của nó là 3, 4, 5 thì vòng lặp này thông báo tên của 3 TextBox và nội dung chứa trong TextBox
Mã:
For n = 3 To 5
  MsgBox "Id " & n & "  " & Controls(n).Name & "   " & Controls(n).Value
Next
Thứ tự Control là thứ tự khi bạn tạo các đối tượng trên Form, đt đầu tiên là 0, kế tiếp là 1, 2, ... Do đó, muốn dùng vòng lặp truy cập các TextBox bạn phải tạo các Texbox liên tục.

Trong tập tin Control.xls, có ví dụ để kiểm tra thứ tự của Control và truy cập chúng.
 

File đính kèm

  • Control.zip
    9.4 KB · Đọc: 87
Upvote 0
Lời cám ơn

Xin cám ơn các Huynh !
Mình đã làm theo và đạt kết quả như ý !!!
Riêng cách của Huynh NVSON áp dụng được cả cho Excel97
(Hình như Office97 không có tính năng tự động tạo mảng control trên form)
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom