Nhờ các cao thủ giúp đỡ: sử dụng Text box giống như hàm lookup (1 người xem)

  • Thread starter Thread starter chua123
  • Ngày gửi Ngày gửi
Liên hệ QC

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

chua123

Thành viên mới
Tham gia
10/5/14
Bài viết
25
Được thích
3
Giới tính
Nam
Dear các Pác, hổm giờ tự mày mò VBA, em cần làm 1 form để nhập số liệu, cụ thể như sau:
em có 1 sheet data chứa mã sản phẩm, và tên sản phẩm đó. Em muốn làm 1 userform có 2 text bõ, khi nhập mã sp vào text box 1 thì ở tẽt box 2 sẽ xuất hiện tên sp đó. Các pác giúp em với.
 

File đính kèm

Dear các Pác, hổm giờ tự mày mò VBA, em cần làm 1 form để nhập số liệu, cụ thể như sau:
em có 1 sheet data chứa mã sản phẩm, và tên sản phẩm đó. Em muốn làm 1 userform có 2 text bõ, khi nhập mã sp vào text box 1 thì ở tẽt box 2 sẽ xuất hiện tên sp đó. Các pác giúp em với.
Code cho TextBox1:
[gpecode=vb]
Private Sub TextBox1_Change()
Dim Rng As Range, FindR As Range
Set Rng = Sheet1.Range("A2:A" & Sheet1.Range("A65535").End(xlUp).Row)
Set FindR = Rng.Find(TextBox1.Value, , xlValues, xlWhole)
If Not FindR Is Nothing Then
TextBox2 = FindR.Offset(, 1).Value
Else
TextBox2 = Null
End If
End Sub
[/gpecode]
 

File đính kèm

Upvote 0
Code cho TextBox1:
[gpecode=vb]
Private Sub TextBox1_Change()
Dim Rng As Range, FindR As Range
Set Rng = Sheet1.Range("A2:A" & Sheet1.Range("A65535").End(xlUp).Row)
Set FindR = Rng.Find(TextBox1.Value, , xlValues, xlWhole)
If Not FindR Is Nothing Then
TextBox2 = FindR.Offset(, 1).Value
Else
TextBox2 = Null
End If
End Sub
[/gpecode]

Cảm ơn bác rất nhiều, nhiều lắm!
 
Upvote 0
Code cho TextBox1:
[gpecode=vb]
Private Sub TextBox1_Change()
Dim Rng As Range, FindR As Range
Set Rng = Sheet1.Range("A2:A" & Sheet1.Range("A65535").End(xlUp).Row)
Set FindR = Rng.Find(TextBox1.Value, , xlValues, xlWhole)
If Not FindR Is Nothing Then
TextBox2 = FindR.Offset(, 1).Value
Else
TextBox2 = Null
End If
End Sub
[/gpecode]

Tiện thể Pác cho em hỏi luôn, nếu có thêm text box 3 cần lấy giá trị ở cột C, text bõ 4 cấn lấy giá trị ở cột D, thi làm sao nữa, em mò không ra.

Cám ơn Pác nhiều!
 
Upvote 0
Tiện thể Pác cho em hỏi luôn, nếu có thêm text box 3 cần lấy giá trị ở cột C, text bõ 4 cấn lấy giá trị ở cột D, thi làm sao nữa, em mò không ra.
Cám ơn Pác nhiều!
Bạn sắp xếp TextBox hợp lý, liên tục thì dùng vòng lặp, mỗi cột là 1 bước nhảy trong thuộc tính Offset.
[gpecode=vb]
Private Sub TextBox1_Change()
Dim Rng As Range, FindR As Range, Tb As Byte
Set Rng = Sheet1.Range("A2:A" & Sheet1.Range("A65535").End(xlUp).Row)
Set FindR = Rng.Find(TextBox1.Value, , xlValues, xlWhole)
If Not FindR Is Nothing Then
For Tb = 1 To 3
Me.Controls("TextBox" & Tb + 1) = FindR.Offset(, Tb).Value
Next Tb
Else
For Tb = 1 To 3
Me.Controls("TextBox" & Tb + 1) = Null
Next Tb
End If
End Sub
[/gpecode]
 

File đính kèm

Upvote 0
Bạn sắp xếp TextBox hợp lý, liên tục thì dùng vòng lặp, mỗi cột là 1 bước nhảy trong thuộc tính Offset.
[gpecode=vb]
Private Sub TextBox1_Change()
Dim Rng As Range, FindR As Range, Tb As Byte
Set Rng = Sheet1.Range("A2:A" & Sheet1.Range("A65535").End(xlUp).Row)
Set FindR = Rng.Find(TextBox1.Value, , xlValues, xlWhole)
If Not FindR Is Nothing Then
For Tb = 1 To 3
Me.Controls("TextBox" & Tb + 1) = FindR.Offset(, Tb).Value
Next Tb
Else
For Tb = 1 To 3
Me.Controls("TextBox" & Tb + 1) = Null
Next Tb
End If
End Sub
[/gpecode]
Pác thật tuyệt vời. Hiện em đang làm 1 file để các anh em trong dây chuyền sản xuất cập nhập các số liệu để làm data cho các mục tiêu sau này. Chắc sẽ còn nhiều cái cần hỏi Pác nữa, mong Pác hỗ trợ giúp em. Em đang tự mò VBA --> nên gà lắm. Nếu có hỏi nhiều, hỏi dai mong Pác đừng giận
 
Upvote 0
Bạn sắp xếp TextBox hợp lý, liên tục thì dùng vòng lặp, mỗi cột là 1 bước nhảy trong thuộc tính Offset.
[gpecode=vb]
Private Sub TextBox1_Change()
Dim Rng As Range, FindR As Range, Tb As Byte
Set Rng = Sheet1.Range("A2:A" & Sheet1.Range("A65535").End(xlUp).Row)
Set FindR = Rng.Find(TextBox1.Value, , xlValues, xlWhole)
If Not FindR Is Nothing Then
For Tb = 1 To 3
Me.Controls("TextBox" & Tb + 1) = FindR.Offset(, Tb).Value
Next Tb
Else
For Tb = 1 To 3
Me.Controls("TextBox" & Tb + 1) = Null
Next Tb
End If
End Sub
[/gpecode]
Thế sao không viết thế này cho gọn:
Mã:
Private Sub TextBox1_Change()
  Dim Rng As Range, FindR As Range, Tb As Long
  Set Rng = Sheet1.Range("A2:A" & Sheet1.Range("A65535").End(xlUp).Row)
  Set FindR = Rng.Find(TextBox1.Value, , xlValues, xlWhole)
  For Tb = 1 To 3
    If Not FindR Is Nothing Then
      Me.Controls("TextBox" & Tb + 1) = FindR.Offset(, Tb).Value
    Else
      Me.Controls("TextBox" & Tb + 1) = Null
    End If
  Next Tb
End Sub
Hoặc:
Mã:
Private Sub TextBox1_Change()
  Dim Rng As Range, FindR As Range, Tb As Long, match As Boolean, res As String
  Set Rng = Sheet1.Range("A2:A" & Sheet1.Range("A65535").End(xlUp).Row)
  Set FindR = Rng.Find(TextBox1.Value, , xlValues, xlWhole)
  match = (Not FindR Is Nothing)
  For Tb = 1 To 3
    If match Then res = FindR.Offset(, Tb).Value
    Me.Controls("TextBox" & Tb + 1) = res
  Next Tb
End Sub
Theo tôi thì cách dưới hay hơn
-----------------------------------------
Góp ý: Đừng nên khai báo biến kiểu Byte, sẽ có lúc bị... bực mình (kiểu Long chắc ăn nhất)
 
Upvote 0
Thế sao không viết thế này cho gọn:
Mã:
Private Sub TextBox1_Change()
  Dim Rng As Range, FindR As Range, Tb As Long
  Set Rng = Sheet1.Range("A2:A" & Sheet1.Range("A65535").End(xlUp).Row)
  Set FindR = Rng.Find(TextBox1.Value, , xlValues, xlWhole)
  For Tb = 1 To 3
    If Not FindR Is Nothing Then
      Me.Controls("TextBox" & Tb + 1) = FindR.Offset(, Tb).Value
    Else
      Me.Controls("TextBox" & Tb + 1) = Null
    End If
  Next Tb
End Sub
Hoặc:
Mã:
Private Sub TextBox1_Change()
  Dim Rng As Range, FindR As Range, Tb As Long, match As Boolean, res As String
  Set Rng = Sheet1.Range("A2:A" & Sheet1.Range("A65535").End(xlUp).Row)
  Set FindR = Rng.Find(TextBox1.Value, , xlValues, xlWhole)
  match = (Not FindR Is Nothing)
  For Tb = 1 To 3
    If match Then res = FindR.Offset(, Tb).Value
    Me.Controls("TextBox" & Tb + 1) = res
  Next Tb
End Sub
Theo tôi thì cách dưới hay hơn
-----------------------------------------
Góp ý: Đừng nên khai báo biến kiểu Byte, sẽ có lúc bị... bực mình (kiểu Long chắc ăn nhất)
Cảm ơn Thầy chỉnh lại code tối ưu hơn. Em có nghĩ cách đó mà cũng vội quá nên không sửa lại.
Vì chưa rành khai báo biến nên em nghĩ khai báo Byte nó đỡ chiếm bộ nhớ hơn.
 
Upvote 0
Em cám ơn mọi người nhiều lắm.
 
Upvote 0

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

Back
Top Bottom