Em có 1 file excel có thông tin khách hàng.
Em muốn tạo UserForm có combobox để chọn khách hàng muốn chỉnh sửa thông tin, và các giá trị cùng dòng (ví dụ combobox lấy tên khách hàng từ ô B4, thì các giá trị từ C4 đến Q4) sẽ tự cập nhật vào các textbox. Sau đó em sẽ cập nhật các text có nội dung cần thay đổi và bấm commandbutton để cập nhật ngược dữ liệu về sheet. Đây là mong muốn của em.
Hiện tại, em đã tạo được combobox lấy dữ liệu từ B4-B1500 nhưng em chưa biết làm sao để tiếp tục. Mong các anh chị hướng dẫn em.
Private Sub UserForm_Initialize()
Dim a As Object
For Each a In Sheet1.Range("B4:B1500")
ComboBox1.AddItem a
Next
End Sub
Em xin cảm ơn
Em có 1 file excel có thông tin khách hàng.
Em muốn tạo UserForm có combobox để chọn khách hàng muốn chỉnh sửa thông tin, và các giá trị cùng dòng (ví dụ combobox lấy tên khách hàng từ ô B4, thì các giá trị từ C4 đến Q4) sẽ tự cập nhật vào các textbox. Sau đó em sẽ cập nhật các text có nội dung cần thay đổi và bấm commandbutton để cập nhật ngược dữ liệu về sheet. Đây là mong muốn của em.
Hiện tại, em đã tạo được combobox lấy dữ liệu từ B4-B1500 nhưng em chưa biết làm sao để tiếp tục. Mong các anh chị hướng dẫn em.
Private Sub UserForm_Initialize()
Dim a As Object
For Each a In Sheet1.Range("B4:B1500")
ComboBox1.AddItem a
Next
End Sub
Em xin cảm ơn
Bạn muốn cập nhật thế nào?
1) Chỉnh sửa những thông tin Khách hàng đã được nhập.
2) Nhập Khách hàng mới.
3) Cả hai?
Lưu ý: Tôi thấy trong dữ liệu, cột Tên KH và cột Mã KH, 2 cột này hầu như hoặc là được quy ước phải đặt sát nhau "như hình với bóng", nhưng tại sao trong sheet nó lại bị chen giữa cột Số ĐT??? Còn UserForm lại thiết kế sát nhau????
Cho bạn xem trước cách load dữ liệu và xử lý dữ liệu đã load:
Mã:
Private Sub UserForm_Initialize()
Dim e As Long
e = Sheet1.Range("B" & Sheet1.Rows.Count).End(xlUp).Row
ComboBox1.List = Sheet1.Range("B4:H" & e).Value
End Sub
Private Sub ComboBox1_Change()
Dim arrCtrl
Dim c As Byte
arrCtrl = Array(0, TextBox3, TextBox1, TextBox2, TextBox4, TextBox5, TextBox6)
For c = 1 To UBound(arrCtrl)
arrCtrl(c).Text = ""
Next
If ComboBox1.MatchFound Then
For c = 1 To UBound(arrCtrl)
arrCtrl(c).Text = ComboBox1.List(, c)
Next
End If
End Sub
Bạn muốn cập nhật thế nào?
1) Chỉnh sửa những thông tin Khách hàng đã được nhập.
2) Nhập Khách hàng mới.
3) Cả hai?
Lưu ý: Tôi thấy trong dữ liệu, cột Tên KH và cột Mã KH, 2 cột này hầu như hoặc là được quy ước phải đặt sát nhau "như hình với bóng", nhưng tại sao trong sheet nó lại bị chen giữa cột Số ĐT??? Còn UserForm lại thiết kế sát nhau????
Cho bạn xem trước cách load dữ liệu và xử lý dữ liệu đã load:
Mã:
Private Sub UserForm_Initialize()
Dim e As Long
e = Sheet1.Range("B" & Sheet1.Rows.Count).End(xlUp).Row
ComboBox1.List = Sheet1.Range("B4:H" & e).Value
End Sub
Private Sub ComboBox1_Change()
[/QUOTE]
[/QUOTE]
Đầu tiên em cảm ơn vì nhận được sự hướng dẫn nhiệt tình của Mod.
Hiện tại nhu cầu của em chỉ cần cập nhật thông tin khách hàng được chọn ở mục combobox chứ không có thêm mới và xóa ạ.
Em xin được phép trình bày rõ hơn, nếu em muốn cập nhật số điện thoại của khách hàng A thì em muốn chọn khách hàng A ở combobox và chỉnh sửa lại số điện thoại xuất hiện ở textbox và cập nhật lại ở excel.
Em sẽ thử áp dụng đoạn code Mod đã chia sẽ. Em rất cảm ơn ạ.
Đầu tiên em cảm ơn vì nhận được sự hướng dẫn nhiệt tình của Mod.
Hiện tại nhu cầu của em chỉ cần cập nhật thông tin khách hàng được chọn ở mục combobox chứ không có thêm mới và xóa ạ.
Em xin được phép trình bày rõ hơn, nếu em muốn cập nhật số điện thoại của khách hàng A thì em muốn chọn khách hàng A ở combobox và chỉnh sửa lại số điện thoại xuất hiện ở textbox và cập nhật lại ở excel.
Em sẽ thử áp dụng đoạn code Mod đã chia sẽ. Em rất cảm ơn ạ.
- Khi form được hiện lên, nó sẽ cập nhật dữ liệu từ sheet lên ComboBox1.
- Khi ComboBox1 được chọn 1 trong những khách hàng, nút Lưu chỉnh sửa được kích hoạt.
- Ngược lại khi ComboBox1 nhập 1 khách hàng mới (KH không có trong list) thì nút Nhập mới được kích hoạt.
- Dù nút nào được kích hoạt cũng sẽ thông báo nếu các TextBox bị trống.
- Nếu Lưu mới nó sẽ nhập tiếp vào hàng cuối cùng của bảng dữ liệu.
- Nếu Lưu chỉnh sửa, nó sẽ tìm kiếm theo mã KH để cập nhật dữ liệu đã chỉnh sửa vào hàng đó.
- Khi chỉnh sửa, 2 trường không thay đổi đó là Tên KH và Mã KH, còn lại đều chỉnh sửa được hết.
Khi có sự thay đổi trên ComboBox1:
Mã:
Private Sub ComboBox1_Change()
Dim arrCtrl
Dim c As Byte
arrCtrl = Array(0, TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6)
For c = 1 To UBound(arrCtrl)
arrCtrl(c).Text = ""
Next
If ComboBox1.MatchFound Then
For c = 1 To UBound(arrCtrl)
arrCtrl(c).Text = ComboBox1.List(, c)
Next
TextBox1.Locked = True
CommandButton1.Enabled = True
CommandButton2.Enabled = False
Else
TextBox1.Locked = False
CommandButton1.Enabled = False
If ComboBox1.Text > "" Then
CommandButton2.Enabled = True
End If
End If
End Sub
Để Lưu chỉnh sửa:
Mã:
Private Sub CommandButton1_Click()
If TextBox2.Text = "" Then
MsgBox "Ban phai nhap Dia chi!"
TextBox2.SetFocus
Exit Sub
End If
If TextBox3.Text = "" Then
MsgBox "Ban phai nhap So dien thoai!"
TextBox3.SetFocus
Exit Sub
End If
If TextBox4.Text = "" Then
MsgBox "Ban phai nhap Muc 1!"
TextBox4.SetFocus
Exit Sub
End If
If TextBox5.Text = "" Then
MsgBox "Ban phai nhap Muc 2!"
TextBox5.SetFocus
Exit Sub
End If
If TextBox6.Text = "" Then
MsgBox "Ban phai nhap Muc 3!"
TextBox6.SetFocus
Exit Sub
End If
Dim arrCtrl
Dim c As Byte, u As Byte
arrCtrl = Array(ComboBox1, TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6)
u = UBound(arrCtrl)
For c = 1 To u
If ComboBox1.List(, c) <> arrCtrl(c).Text Then
Exit For
End If
Next
If c > u Then
MsgBox "Ban chua thay doi muc nao nen chuc nang nay khong kha dung!"
Else
Dim e As Long
Dim rngFind As Range
e = Sheet1.Range("B" & Sheet1.Rows.Count).End(xlUp).Row
Set rngFind = Sheet1.Range("C4:C" & e).Find(What:=TextBox1.Text, LookIn:=xlValues, LookAt:=xlWhole)
If Not rngFind Is Nothing Then
e = rngFind.Row
For c = 2 To UBound(arrCtrl)
Sheet1.Range("D" & e).Offset(, c - 2).Value = arrCtrl(c).Text
ComboBox1.List(ComboBox1.ListIndex, c) = arrCtrl(c).Text
Next
MsgBox "Da luu chinh sua!"
For c = 0 To UBound(arrCtrl)
arrCtrl(c).Text = ""
Next
ComboBox1.SetFocus
End If
End If
End Sub
Để nhập mới:
Mã:
Private Sub CommandButton2_Click()
If TextBox1.Text = "" Then
MsgBox "Ban phai nhap Ma khach hang!"
TextBox1.SetFocus
Exit Sub
End If
If TextBox2.Text = "" Then
MsgBox "Ban phai nhap Dia chi!"
TextBox2.SetFocus
Exit Sub
End If
If TextBox3.Text = "" Then
MsgBox "Ban phai nhap So dien thoai!"
TextBox3.SetFocus
Exit Sub
End If
If TextBox4.Text = "" Then
MsgBox "Ban phai nhap Muc 1!"
TextBox4.SetFocus
Exit Sub
End If
If TextBox5.Text = "" Then
MsgBox "Ban phai nhap Muc 2!"
TextBox5.SetFocus
Exit Sub
End If
If TextBox6.Text = "" Then
MsgBox "Ban phai nhap Muc 3!"
TextBox6.SetFocus
Exit Sub
End If
Dim arrCtrl
Dim c As Byte
Dim e As Long, STT As Long
arrCtrl = Array(ComboBox1, TextBox1, TextBox3, TextBox2, TextBox4, TextBox5, TextBox6)
e = Sheet1.Range("B" & Sheet1.Rows.Count).End(xlUp).Row
STT = Sheet1.Range("A" & e).Value + 1
e = e + 1
Sheet1.Range("A" & e).Value = STT
For c = 0 To UBound(arrCtrl)
Sheet1.Range("B" & e).Offset(, c).Value = arrCtrl(c).Text
Next
For c = 0 To UBound(arrCtrl)
arrCtrl(c).Text = ""
Next
ComboBox1.SetFocus
End Sub
- Khi form được hiện lên, nó sẽ cập nhật dữ liệu từ sheet lên ComboBox1.
- Khi ComboBox1 được chọn 1 trong những khách hàng, nút Lưu chỉnh sửa được kích hoạt.
- Ngược lại khi ComboBox1 nhập 1 khách hàng mới (KH không có trong list) thì nút Nhập mới được kích hoạt.
- Dù nút nào được kích hoạt cũng sẽ thông báo nếu các TextBox bị trống.
- Nếu Lưu mới nó sẽ nhập tiếp vào hàng cuối cùng của bảng dữ liệu.
- Nếu Lưu chỉnh sửa, nó sẽ tìm kiếm theo mã KH để cập nhật dữ liệu đã chỉnh sửa vào hàng đó.
- Khi chỉnh sửa, 2 trường không thay đổi đó là Tên KH và Mã KH, còn lại đều chỉnh sửa được hết.
Khi có sự thay đổi trên ComboBox1:
Mã:
Private Sub ComboBox1_Change()
Dim arrCtrl
Dim c As Byte
arrCtrl = Array(0, TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6)
For c = 1 To UBound(arrCtrl)
arrCtrl(c).Text = ""
Next
If ComboBox1.MatchFound Then
For c = 1 To UBound(arrCtrl)
arrCtrl(c).Text = ComboBox1.List(, c)
Next
TextBox1.Locked = True
CommandButton1.Enabled = True
CommandButton2.Enabled = False
Else
TextBox1.Locked = False
CommandButton1.Enabled = False
If ComboBox1.Text > "" Then
CommandButton2.Enabled = True
End If
End If
End Sub
Để Lưu chỉnh sửa:
Mã:
Private Sub CommandButton1_Click()
If TextBox2.Text = "" Then
MsgBox "Ban phai nhap Dia chi!"
TextBox2.SetFocus
Exit Sub
End If
If TextBox3.Text = "" Then
MsgBox "Ban phai nhap So dien thoai!"
TextBox3.SetFocus
Exit Sub
End If
If TextBox4.Text = "" Then
MsgBox "Ban phai nhap Muc 1!"
TextBox4.SetFocus
Exit Sub
End If
If TextBox5.Text = "" Then
MsgBox "Ban phai nhap Muc 2!"
TextBox5.SetFocus
Exit Sub
End If
If TextBox6.Text = "" Then
MsgBox "Ban phai nhap Muc 3!"
TextBox6.SetFocus
Exit Sub
End If
Dim arrCtrl
Dim c As Byte, u As Byte
arrCtrl = Array(ComboBox1, TextBox1, TextBox2, TextBox3, TextBox4, TextBox5, TextBox6)
u = UBound(arrCtrl)
For c = 1 To u
If ComboBox1.List(, c) <> arrCtrl(c).Text Then
Exit For
End If
Next
If c > u Then
MsgBox "Ban chua thay doi muc nao nen chuc nang nay khong kha dung!"
Else
Dim e As Long
Dim rngFind As Range
e = Sheet1.Range("B" & Sheet1.Rows.Count).End(xlUp).Row
Set rngFind = Sheet1.Range("C4:C" & e).Find(What:=TextBox1.Text, LookIn:=xlValues, LookAt:=xlWhole)
If Not rngFind Is Nothing Then
e = rngFind.Row
For c = 2 To UBound(arrCtrl)
Sheet1.Range("D" & e).Offset(, c - 2).Value = arrCtrl(c).Text
ComboBox1.List(ComboBox1.ListIndex, c) = arrCtrl(c).Text
Next
MsgBox "Da luu chinh sua!"
For c = 0 To UBound(arrCtrl)
arrCtrl(c).Text = ""
Next
ComboBox1.SetFocus
End If
End If
End Sub
Để nhập mới:
Mã:
Private Sub CommandButton2_Click()
If TextBox1.Text = "" Then
MsgBox "Ban phai nhap Ma khach hang!"
TextBox1.SetFocus
Exit Sub
End If
If TextBox2.Text = "" Then
MsgBox "Ban phai nhap Dia chi!"
TextBox2.SetFocus
Exit Sub
End If
If TextBox3.Text = "" Then
MsgBox "Ban phai nhap So dien thoai!"
TextBox3.SetFocus
Exit Sub
End If
If TextBox4.Text = "" Then
MsgBox "Ban phai nhap Muc 1!"
TextBox4.SetFocus
Exit Sub
End If
If TextBox5.Text = "" Then
MsgBox "Ban phai nhap Muc 2!"
TextBox5.SetFocus
Exit Sub
End If
If TextBox6.Text = "" Then
MsgBox "Ban phai nhap Muc 3!"
TextBox6.SetFocus
Exit Sub
End If
Dim arrCtrl
Dim c As Byte
Dim e As Long, STT As Long
arrCtrl = Array(ComboBox1, TextBox1, TextBox3, TextBox2, TextBox4, TextBox5, TextBox6)
e = Sheet1.Range("B" & Sheet1.Rows.Count).End(xlUp).Row
STT = Sheet1.Range("A" & e).Value + 1
e = e + 1
Sheet1.Range("A" & e).Value = STT
For c = 0 To UBound(arrCtrl)
Sheet1.Range("B" & e).Offset(, c).Value = arrCtrl(c).Text
Next
For c = 0 To UBound(arrCtrl)
arrCtrl(c).Text = ""
Next
ComboBox1.SetFocus
End Sub
Uhm, tốt lắm, tôi cập nhật cho bạn một ít tiện ích.
1) Sau khi nhập một KH mới, nó sẽ tự động cập nhật lên ComboBox (tương tự chỉnh sửa).
2) Khi nhập mã KH mới, nếu trùng mã nó ngăn không cho nhập.
Uhm, tốt lắm, tôi cập nhật cho bạn một ít tiện ích.
1) Sau khi nhập một KH mới, nó sẽ tự động cập nhật lên ComboBox (tương tự chỉnh sửa).
2) Khi nhập mã KH mới, nếu trùng mã nó ngăn không cho nhập.
Uhm, tốt lắm, tôi cập nhật cho bạn một ít tiện ích.
1) Sau khi nhập một KH mới, nó sẽ tự động cập nhật lên ComboBox (tương tự chỉnh sửa).
2) Khi nhập mã KH mới, nếu trùng mã nó ngăn không cho nhập.
Mình lại có 1 vấn đề nhờ các bác giúp với ak. Cũng như nội dung trên khi dữ liệu được load lên text và có 1 nút bấm xuât hay chèn ji đó thì giá trị text đó được đưa vào 1 file excel mới đã đc xác định vị trí của text đưa vào.( file excel mới xem như là file mẫu moiix lần chèn được sao chép qua 1 file mới rồi chèn giá trị) bác nào có thể giúp mình với ak
Mình lại có 1 vấn đề nhờ các bác giúp với ak. Cũng như nội dung trên khi dữ liệu được load lên text và có 1 nút bấm xuât hay chèn ji đó thì giá trị text đó được đưa vào 1 file excel mới đã đc xác định vị trí của text đưa vào.( file excel mới xem như là file mẫu moiix lần chèn được sao chép qua 1 file mới rồi chèn giá trị) bác nào có thể giúp mình với ak
File mẫu đây bác ơi.
Khi chọn tên công trình trong Combobox DSTENCT thì các thông tin cần lấy được đưa vào các TEXTBOX tương ứng phía dưới.
Minh muốn khi bấm nút Thanh toán trên form này thì các giá trị trên sẽ được đưa vào file excel PL3a(file mẫu) và được lưu lại với tên khác theo tên công trình. Nhờ các bác giúp phần này với.