HELP! Sử dụng combobox để cập nhật dữ liệu trong file Excel

Liên hệ QC
Tôi tuân thủ nội quy khi đăng bài

test1986

Thành viên mới
Tham gia
19/10/22
Bài viết
9
Được thích
2
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
 
Tặng bạn code cùi bắp của mình.
 

File đính kèm

  • test VBA_fix.xlsm
    22 KB · Đọc: 16
Upvote 0
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
 
Lần chỉnh sửa cuối:
Upvote 0

HELP! Sử dụng combobox để cập nhật dữ liệu trong file Excel​

Tiêu đề bài này vi phạm Nội qui diễn đàn, vui lòng không tiếp tay cho sai phạm.
 
Upvote 0
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 ạ.
 
Upvote 0
Đầ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 ạ.
Trước tiên hết, tôi đặt vị trí các cột tương ứng với các TextBox trong UserForm, bạn có đồng ý không? Sau đó tôi viết cho bạn cả 2 nút lệnh.

1711532264672.png
 
Upvote 0
Em đồng ý với chỉnh sửa của mod về vị trí của 2 cột trê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
 

File đính kèm

  • test VBA-HTN.xlsm
    29.3 KB · Đọc: 10
Upvote 0
- 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
Em sau khi sử dụng code mà Mod đã hướng dẫn thì kết quả trả về hoàn toàn là những gì em mong muốn.
Em cảm ơn Mod rất nhiều ạ.
 
Upvote 0
Em sau khi sử dụng code mà Mod đã hướng dẫn thì kết quả trả về hoàn toàn là những gì em mong muốn.
Em cảm ơn Mod rất nhiều ạ.
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.
 

File đính kèm

  • test VBA-HTN-2.xlsm
    28.1 KB · Đọc: 15
Upvote 0
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.
hay quá, em có mẫu gần tương tự bác giúp em với
 
Upvote 0
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.
nhờ bác làm giúp em lệnh sản xuất, mô tả hơi dài dòng nên em để phần mô tả trong file cho thực tế. công việc là nhập form mẫu, lưu vào log sau đó in
 

File đính kèm

  • lệnh SX.xlsm
    30 KB · Đọc: 9
Upvote 0
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
 
Upvote 0
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
Bạn không viết tắt để có cảm tình với người giúp hơn. Nếu có thể đính kèm file lên để mọi người dễ hình dung những gì bạn nói
 
Upvote 0
Bạn không viết tắt để có cảm tình với người giúp hơn. Nếu có thể đính kèm file lên để mọi người dễ hình dung những gì bạn nói
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.
 

File đính kèm

  • File Data.xlsm
    123.6 KB · Đọc: 0
  • PL3a.xls
    1.1 MB · Đọc: 0
Upvote 0
Web KT
Back
Top Bottom