Nhập tên trên FORM theo điều kiện.

Liên hệ QC

Hoàng Trọng Nghĩa

Chuyên gia GPE
Thành viên BQT
Moderator
Tham gia
17/8/08
Bài viết
8,662
Được thích
16,720
Giới tính
Nam
XIN VUI LÒNG CHỈ DẪN CODE ĐIỀN TÊN THEO ĐIỀU KIỆN
Tôi có 1 USERFORM, có 1 textbox, 1 combobox, 1 commandbutton.
Tôi muốn điền tên vào trong Sheet1 tại cột NGƯỜI THUÊ bằng USERFORM với điều kiện tại cột SHOP CHƯA THUÊ và Combobox1 lấy nguồn từ SHOP CHƯA THUÊ.
Sau khi tôi gõ tên tại Textbox1 và chọn shop còn trống, sau đó tôi click vào "điền tên" thì tại hàng chứa tên có shop còn trống thì được điền vào.
Ví dụ:
Tôi chọn Combobox1 với giá trị là 6A thì khi nhấp "Điền tên" thì tại cell B10 sẽ được nhập giá trị tên của Textbox1. (Xin xem file).

Kính mong được hướng dẫn.

XIN CHÂN THÀNH CẢM ƠN.
 

File đính kèm

Bác gán đoạn code của nút Điền tên:

Private Sub CommandButton1_Click()
Dim i As Integer
i = 1
Do Until IsEmpty(Range("A1").Offset(i, 0))
If Range("A1").Offset(i, 0).Value = Me.ComboBox1.Text Then
Range("A1").Offset(i, 1).Value = Me.TextBox1.Text
Exit Do
End If
i = i + 1
Loop
End Sub
 
Upvote 0
XIN VUI LÒNG CHỈ DẪN CODE ĐIỀN TÊN THEO ĐIỀU KIỆN
Tôi có 1 USERFORM, có 1 textbox, 1 combobox, 1 commandbutton.
Tôi muốn điền tên vào trong Sheet1 tại cột NGƯỜI THUÊ bằng USERFORM với điều kiện tại cột SHOP CHƯA THUÊ và Combobox1 lấy nguồn từ SHOP CHƯA THUÊ.
Sau khi tôi gõ tên tại Textbox1 và chọn shop còn trống, sau đó tôi click vào "điền tên" thì tại hàng chứa tên có shop còn trống thì được điền vào.
Ví dụ:
Tôi chọn Combobox1 với giá trị là 6A thì khi nhấp "Điền tên" thì tại cell B10 sẽ được nhập giá trị tên của Textbox1. (Xin xem file).

Kính mong được hướng dẫn.

XIN CHÂN THÀNH CẢM ƠN.
Nếu cột C có dữ liệu dạng DUY NHẤT thì bạn có thể dùng Find Method để tìm ---> Tìm đến nơi, sẽ gán giá trị của textbox vào Offset(,-1)
Nếu cột C không duy nhất, bạn có thể dùng AutoFilter với cột C = giá trị ComboBox, cột B = rổng
vân vân...
Yêu cầu này tôi nghĩ bạn thừa sức làm mà!
 
Upvote 0
Nếu cột C có dữ liệu dạng DUY NHẤT thì bạn có thể dùng Find Method để tìm ---> Tìm đến nơi, sẽ gán giá trị của textbox vào Offset(,-1)
Nếu cột C không duy nhất, bạn có thể dùng AutoFilter với cột C = giá trị ComboBox, cột B = rổng
vân vân...
Yêu cầu này tôi nghĩ bạn thừa sức làm mà!

Em mới tập tành code trong VBA thôi nên chưa hiểu biết nhiều lắm Thầy ơi, chủ yếu tham khảo bài có sẳn rồi tìm cách chế biến, thêm bớt để học hỏi thêm. Như Find Method em hoàn toàn không biết Thầy ạ. Thầy làm ơn hướng dẫn cho em đi ạ. Cám ơn Thầy nhiều!
 
Upvote 0
Em mới tập tành code trong VBA thôi nên chưa hiểu biết nhiều lắm Thầy ơi, chủ yếu tham khảo bài có sẳn rồi tìm cách chế biến, thêm bớt để học hỏi thêm. Như Find Method em hoàn toàn không biết Thầy ạ. Thầy làm ơn hướng dẫn cho em đi ạ. Cám ơn Thầy nhiều!

Anh thử dùng code sau:

Mã:
Private Sub CommandButton1_Click()
Dim c As Range
With Sheet1.Range("c2:c" & Sheet1.[a56536].End(xlUp).Row)
    Set c = .Find(ComboBox1, LookIn:=xlValues, LookAt:=xlPart)
    If Not c Is Nothing Then
        c.Offset(0, -1) = TextBox1.Text
        TextBox1.Text = ""
    End If
End With

End Sub
 

File đính kèm

Upvote 0
Anh thử dùng code sau:

Mã:
Private Sub CommandButton1_Click()
Dim c As Range
With Sheet1.Range("c2:c" & Sheet1.[a56536].End(xlUp).Row)
Set c = .Find(ComboBox1, LookIn:=xlValues, LookAt:=xlPart)
If Not c Is Nothing Then
c.Offset(0, -1) = TextBox1.Text
TextBox1.Text = ""
End If
End With
 
End Sub

Cẩn thận với hàm FIND kết hợp với LookIn, LookAt, hình như không ổn, vì nếu nó nhận giá trị na ná, nó sẽ cho ra giá trị không chính xác.
=> Nên làm theo hàm VLOOKUP của Excel thì chính xác hơn!
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Cẩn thận với hàm FIND kết hợp với LookIn, LookAt, hình như không ổn, vì nếu nó nhận giá trị na ná, nó sẽ cho ra giá trị không chính xác.
=> Nên làm theo hàm VLOOKUP của Excel thì chính xác hơn!
Phương thức Find này còn nhiều tham số nữa, bạn chưa gắn vào hết mà đã trách Find.
Bạn sửa
LookAt:=xlPart thành LookAt:=xlWhole xem
Và còn thêm
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True, SearchFormat:=False
 
Upvote 0
Phương thức Find này còn nhiều tham số nữa, bạn chưa gắn vào hết mà đã trách Find.
Bạn sửa
LookAt:=xlPart thành LookAt:=xlWhole xem
Và còn thêm
SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=True, SearchFormat:=False

Cám ơn Anh TUẤN, thì như lúc đầu em cũng chưa biết gì về phương thức này, được bạn Dom hướng dẫn, em check lại thấy chưa ổn. Giờ có Anh hướng dẫn thêm mới được học thêm. Cám ơn Anh.

Cho hỏi thêm, nếu như một cái dùng phương thức Find này và một cái dùng hàm Vlookup, kết quả cũng như nhau, như vậy cái nào mình nên sử dụng ?

-------------------------------

Sau khi test lại, chắc có lẽ mình nên dùng Find, bởi nếu giá trị không đúng thì cũng chẳng sao, còn VlookUp sẽ bị lỗi ngay nếu ta không bẩy lỗi On Error Resume Next.
 
Lần chỉnh sửa cuối:
Upvote 0
Cám ơn Anh TUẤN, thì như lúc đầu em cũng chưa biết gì về phương thức này, được bạn Dom hướng dẫn, em check lại thấy chưa ổn. Giờ có Anh hướng dẫn thêm mới được học thêm. Cám ơn Anh.

Cho hỏi thêm, nếu như một cái dùng phương thức Find này và một cái dùng hàm Vlookup, kết quả cũng như nhau, như vậy cái nào mình nên sử dụng ?

-------------------------------

Sau khi test lại, chắc có lẽ mình nên dùng Find, bởi nếu giá trị không đúng thì cũng chẳng sao, còn VlookUp sẽ bị lỗi ngay nếu ta không bẩy lỗi On Error Resume Next.
Dùng Find cũng phải bẩy lỗi thôi ---> Tìm không thấy là.. chết liền ấy chứ
Ví dụ code của Doom cũng có đoạn bẩy lỗi này: If Not c Is Nothing Then (bỏ nó sẽ biết liền)
Mặc khác: Dùng Find chưa chắc gì tốc độ đã hơn VLOOKUP
Tùy trường hợp mà quyết định nên xài cái nào cho hợp lý nhất
 
Upvote 0
Web KT

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

Back
Top Bottom