Xin các bác trợ giúp code cho nút " sửa " trong uf nhập liệu. (1 người xem)

Liên hệ QC

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

thanhnamxd

Thành viên chính thức
Tham gia
3/1/13
Bài viết
50
Được thích
12
Nhờ các bác giúp em viết code cho nút " sửa" để có thể update dữ liệu hoặc do nhập nhầm. Ý tưởng của em là click vào nút " sửa" sẽ hiện ra một list ngày muốn sửa, khi chọn ngày cần sửa thì sẽ có thông tin trong uf để mình sửa sau đó có thể lưu lại.
Em mới học qua mấy clip các anh chị dạy VBA nên mới làm được ít. Mong các bác giúp đỡ để có chút thành công với sản phẩm ban đầu cho có động lực tìm hiểu sâu thêm. Cảm ơn các bác !
 

File đính kèm

Nhờ các bác giúp em viết code cho nút " sửa" để có thể update dữ liệu hoặc do nhập nhầm. Ý tưởng của em là click vào nút " sửa" sẽ hiện ra một list ngày muốn sửa, khi chọn ngày cần sửa thì sẽ có thông tin trong uf để mình sửa sau đó có thể lưu lại.
Em mới học qua mấy clip các anh chị dạy VBA nên mới làm được ít. Mong các bác giúp đỡ để có chút thành công với sản phẩm ban đầu cho có động lực tìm hiểu sâu thêm. Cảm ơn các bác !
Có bác nào giúp đỡ hoặc cho em xin ý kiến với ạ !
 
Upvote 0
Nếu đã giải thích thì hãy giải thích cụ thể, đừng bắt người khác phải đoán khi không cần thiết. List? Lấy từ đâu? Sau khi chọn ngày thì thông tin lấy từ đâu, hiện ở đâu? Tôi nói về nguyên tắc.

Tôi đề nghị như sau.
1. Thêm 1 combobox ngày, vd. cb_ngay. Ở mỗi thời điểm có thể chọn ngày trong cb_ngay. Danh sách ngày trong cb_ngay lấy từ dữ liệu hiện hành của cột SOLIEUVH!A. Chọn ngày trong cb_ngay thì sẽ nhập dữ liệu từ dòng có ngày được chọn trong sheet SOLIEUVH vào các textbox.
2. Ở mỗi thời điểm có thể nhấn nút Sửa. Nhấn nút Sửa thì sẽ sửa các dữ liệu trong sheet SOLIEUVH tại dòng có ngày được chọn trong cb_ngay bằng các giá trị từ các textbox.
 
Upvote 0
Nếu đã giải thích thì hãy giải thích cụ thể, đừng bắt người khác phải đoán khi không cần thiết. List? Lấy từ đâu? Sau khi chọn ngày thì thông tin lấy từ đâu, hiện ở đâu? Tôi nói về nguyên tắc.

Tôi đề nghị như sau.
1. Thêm 1 combobox ngày, vd. cb_ngay. Ở mỗi thời điểm có thể chọn ngày trong cb_ngay. Danh sách ngày trong cb_ngay lấy từ dữ liệu hiện hành của cột SOLIEUVH!A. Chọn ngày trong cb_ngay thì sẽ nhập dữ liệu từ dòng có ngày được chọn trong sheet SOLIEUVH vào các textbox.
2. Ở mỗi thời điểm có thể nhấn nút Sửa. Nhấn nút Sửa thì sẽ sửa các dữ liệu trong sheet SOLIEUVH tại dòng có ngày được chọn trong cb_ngay bằng các giá trị từ các textbox.
Dạ đúng như bác nói đó ạ. Em xin trợ giúp và tư vấn cả về ý tưởng thiết kế. Bác nói đúng ý em luôn. Và nếu có thể bác cho em xin đoạn Code của nút sửa như ý bác nói. Em sẽ mò mẫm làm theo gợi ý của bác. Trân trọng cảm ơn bác !
 
Upvote 0
Bạn nên tạo ra 1 CoboBox để chứa danh sách các ngày đang có trên trang tính

Khi mở UserForm thì duyệt theo cột A lấy các ngày đang có làm nguồn cho ComboBox

Khi chọn 1 ngày cụ thể trong ComboBox, thì macro sẽ duyệt toàn bộ CSDL & tìm lấy ngày trùng với ngày trong ComboBox;
Khi ấy, dữ liệu của dòng tìm thấy sẽ được nạp lên các control trên Form

Chỉ khi ý bạn xem có cần sửa hay không(?)

Rất vui khi được trao đổi cùng bạn.
 
Upvote 0
Bạn nên tạo ra 1 CoboBox để chứa danh sách các ngày đang có trên trang tính

Khi mở UserForm thì duyệt theo cột A lấy các ngày đang có làm nguồn cho ComboBox

Khi chọn 1 ngày cụ thể trong ComboBox, thì macro sẽ duyệt toàn bộ CSDL & tìm lấy ngày trùng với ngày trong ComboBox;
Khi ấy, dữ liệu của dòng tìm thấy sẽ được nạp lên các control trên Form

Chỉ khi ý bạn xem có cần sửa hay không(?)

Rất vui khi được trao đổi cùng bạn.
Cảm ơn AD, em đã tạo ngay được combobox như ý bác, đặt tên rồi và tạo được list trong combobox, nhưng em vẫn chưa biết làm sao để khi click vào ngày đã chọn thì lấy ra được csdl trong bảng tính điền vào các listbox có sẵn. Và khi sửa xong thì nên ấn nút sửa hay nút save. Mong các bác góp ý về ý tưởng cũng như cách làm code. Em biết đề tài này cũ và dễ đối với các bác, nhưng em mới học nên ban đầu là copy code, tạo ra sản phẩm đầu tiên để có động lực. Còn tất nhiên nếu tự học hoặc tham gia khóa học sẽ làm được ngay. Vấn đề cần một sự khởi đầu thuận lợi. Trân trọng cảm ơn các bác đã góp ý !
 
Upvote 0
Dạ đúng như bác nói đó ạ. Em xin trợ giúp và tư vấn cả về ý tưởng thiết kế. Bác nói đúng ý em luôn. Và nếu có thể bác cho em xin đoạn Code của nút sửa như ý bác nói. Em sẽ mò mẫm làm theo gợi ý của bác. Trân trọng cảm ơn bác !
Tôi viết qua. Bạn tự test kỹ.
Yêu cầu: tôi thấy là ngày trong SOLIEUVH bắt đầu từ A6 và là các ngày liên tiếp do bạn có công thức trả về các kết quả liên tiếp bắt đầu từ 1. Vậy code giả thiết là luôn như thế. Trong cb_ngay chỉ có các số 1, 2, ... vì SOLIEUVH là cho 1 tháng cụ thể nên chỉ cần liệt kê ngày thôi.

1. Thêm combobox và sửa name thành cb_ngay.

2. Thêm code
Mã:
Private Sub btn_sua_Click()
Dim curr_row As Long
    curr_row = cb_ngay.ListIndex + 6
    If curr_row < 6 Then Exit Sub
    With Sheet1
        .Range("B" & curr_row).Value = txt_nuoctho.Text
        .Range("C" & curr_row).Value = txt_nuocsach.Text
        .Range("D" & curr_row).Value = txt_mocay.Text
        .Range("E" & curr_row).Value = txt_kimlong.Text
        .Range("F" & curr_row).Value = txt_vitto.Text
        .Range("H" & curr_row).Value = txt_mucbe.Text
        .Range("I" & curr_row).Value = txt_pac.Text
        .Range("K" & curr_row).Value = txt_clo.Text
        .Range("M" & curr_row).Value = txt_kmno4.Text
        .Range("O" & curr_row).Value = txt_dienluoi.Text
        .Range("P" & curr_row).Value = txt_diennlmt.Text
        .Range("T" & curr_row).Value = Combo_baocao.Text
        .Range("U" & curr_row).Value = txt_note.Text
    End With
End Sub

Private Sub cb_ngay_Change()
Dim curr_row As Long
    curr_row = cb_ngay.ListIndex + 6
    If curr_row < 6 Then Exit Sub
    With Sheet1
        txt_nuoctho.Text = .Range("B" & curr_row).Value
        txt_nuocsach.Text = .Range("C" & curr_row).Value
        txt_mocay.Text = .Range("D" & curr_row).Value
        txt_kimlong.Text = .Range("E" & curr_row).Value
        txt_vitto.Text = .Range("F" & curr_row).Value
        txt_mucbe.Text = .Range("H" & curr_row).Value
        txt_pac.Text = .Range("I" & curr_row).Value
        txt_clo.Text = .Range("K" & curr_row).Value
        txt_kmno4.Text = .Range("M" & curr_row).Value
        txt_dienluoi.Text = .Range("O" & curr_row).Value
        txt_diennlmt.Text = .Range("P" & curr_row).Value
        Combo_baocao.Text = .Range("T" & curr_row).Value
        txt_note.Text = .Range("U" & curr_row).Value
    End With
End Sub

Private Sub UserForm_Initialize()
Dim lastRow As Long, k As Long, ngay()
    With ThisWorkbook.Worksheets("SOLIEUVH")
        lastRow = .Cells(Rows.Count, "T").End(xlUp).Row
        If lastRow < 6 Then Exit Sub
    End With
    ReDim ngay(1 To lastRow - 5, 1 To 1)
    For k = 1 To UBound(ngay)
        ngay(k, 1) = k
    Next k
    cb_ngay.List = ngay
End Sub

3. Sửa thành
Mã:
Private Sub btn_nhap_Click()
Dim dong_cuoi As Long
    dong_cuoi = Sheet1.Cells(Rows.Count, 4).End(xlUp).Row + 1
    With Sheet1
        .Range("B" & dong_cuoi).Value = txt_nuoctho.Text
        .Range("C" & dong_cuoi).Value = txt_nuocsach.Text
        .Range("D" & dong_cuoi).Value = txt_mocay.Text
        .Range("E" & dong_cuoi).Value = txt_kimlong.Text
        .Range("F" & dong_cuoi).Value = txt_vitto.Text
        .Range("H" & dong_cuoi).Value = txt_mucbe.Text
        .Range("I" & dong_cuoi).Value = txt_pac.Text
        .Range("K" & dong_cuoi).Value = txt_clo.Text
        .Range("M" & dong_cuoi).Value = txt_kmno4.Text
        .Range("O" & dong_cuoi).Value = txt_dienluoi.Text
        .Range("P" & dong_cuoi).Value = txt_diennlmt.Text
        .Range("T" & dong_cuoi).Value = Combo_baocao.Text
        .Range("U" & dong_cuoi).Value = txt_note.Text
    End With
    cb_ngay.AddItem dong_cuoi - 5
    MsgBox " Chuc mung ban da hoan thanh nhap du lieu "
End Sub
 
Upvote 0
Nhờ các bác giúp em viết code cho nút " sửa" để có thể update dữ liệu hoặc do nhập nhầm. Ý tưởng của em là click vào nút " sửa" sẽ hiện ra một list ngày muốn sửa, khi chọn ngày cần sửa thì sẽ có thông tin trong uf để mình sửa sau đó có thể lưu lại.
Em mới học qua mấy clip các anh chị dạy VBA nên mới làm được ít. Mong các bác giúp đỡ để có chút thành công với sản phẩm ban đầu cho có động lực tìm hiểu sâu thêm. Cảm ơn các bác !
1. Code ở phần sự kiện cờ lích chuột phãi

Mã:
Private Sub Worksheet_BeforeRightClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
On Error Resume Next
Dim I As Long, y As Long
I = Selection.Row

      If Not Intersect(Target, Range("A6:U34")) Is Nothing Then
                   If Range("a" & I) <> "" Then
                 
                   ' Dua code Du lieu tu rang vao From. Tôi ví dú 1 dòng thôi nha
                   UserForm1.txt_nuoctho.Value = Range("b" & I).Value
                   '...
                   '...
                 
                   UserForm1.Show
                 
                             
             End If
        End If
         
End Sub

2. Code nút Sửa ông thọ
Mã:
Private Sub btn_sua_Click()

On Error Resume Next
Dim I As Long
I = Selection.Row

' Lay du lieu xuong. Toi vi dung 1 dong
Range("b" & I).Value = txt_nuoctho.Value
'....
'...

  Unload Me
   
   
End Sub

Chủ yếu tư duy lên. Hỏi mà bắt người ta tư duy từ a đến z luôn thì thua
 
Upvote 0
Tôi viết qua. Bạn tự test kỹ.
Yêu cầu: tôi thấy là ngày trong SOLIEUVH bắt đầu từ A6 và là các ngày liên tiếp do bạn có công thức trả về các kết quả liên tiếp bắt đầu từ 1. Vậy code giả thiết là luôn như thế. Trong cb_ngay chỉ có các số 1, 2, ... vì SOLIEUVH là cho 1 tháng cụ thể nên chỉ cần liệt kê ngày thôi.

1. Thêm combobox và sửa name thành cb_ngay.

2. Thêm code
Mã:
Private Sub btn_sua_Click()
Dim curr_row As Long
    curr_row = cb_ngay.ListIndex + 6
    If curr_row < 6 Then Exit Sub
    With Sheet1
        .Range("B" & curr_row).Value = txt_nuoctho.Text
        .Range("C" & curr_row).Value = txt_nuocsach.Text
        .Range("D" & curr_row).Value = txt_mocay.Text
        .Range("E" & curr_row).Value = txt_kimlong.Text
        .Range("F" & curr_row).Value = txt_vitto.Text
        .Range("H" & curr_row).Value = txt_mucbe.Text
        .Range("I" & curr_row).Value = txt_pac.Text
        .Range("K" & curr_row).Value = txt_clo.Text
        .Range("M" & curr_row).Value = txt_kmno4.Text
        .Range("O" & curr_row).Value = txt_dienluoi.Text
        .Range("P" & curr_row).Value = txt_diennlmt.Text
        .Range("T" & curr_row).Value = Combo_baocao.Text
        .Range("U" & curr_row).Value = txt_note.Text
    End With
End Sub

Private Sub cb_ngay_Change()
Dim curr_row As Long
    curr_row = cb_ngay.ListIndex + 6
    If curr_row < 6 Then Exit Sub
    With Sheet1
        txt_nuoctho.Text = .Range("B" & curr_row).Value
        txt_nuocsach.Text = .Range("C" & curr_row).Value
        txt_mocay.Text = .Range("D" & curr_row).Value
        txt_kimlong.Text = .Range("E" & curr_row).Value
        txt_vitto.Text = .Range("F" & curr_row).Value
        txt_mucbe.Text = .Range("H" & curr_row).Value
        txt_pac.Text = .Range("I" & curr_row).Value
        txt_clo.Text = .Range("K" & curr_row).Value
        txt_kmno4.Text = .Range("M" & curr_row).Value
        txt_dienluoi.Text = .Range("O" & curr_row).Value
        txt_diennlmt.Text = .Range("P" & curr_row).Value
        Combo_baocao.Text = .Range("T" & curr_row).Value
        txt_note.Text = .Range("U" & curr_row).Value
    End With
End Sub

Private Sub UserForm_Initialize()
Dim lastRow As Long, k As Long, ngay()
    With ThisWorkbook.Worksheets("SOLIEUVH")
        lastRow = .Cells(Rows.Count, "T").End(xlUp).Row
        If lastRow < 6 Then Exit Sub
    End With
    ReDim ngay(1 To lastRow - 5, 1 To 1)
    For k = 1 To UBound(ngay)
        ngay(k, 1) = k
    Next k
    cb_ngay.List = ngay
End Sub

3. Sửa thành
Mã:
Private Sub btn_nhap_Click()
Dim dong_cuoi As Long
    dong_cuoi = Sheet1.Cells(Rows.Count, 4).End(xlUp).Row + 1
    With Sheet1
        .Range("B" & dong_cuoi).Value = txt_nuoctho.Text
        .Range("C" & dong_cuoi).Value = txt_nuocsach.Text
        .Range("D" & dong_cuoi).Value = txt_mocay.Text
        .Range("E" & dong_cuoi).Value = txt_kimlong.Text
        .Range("F" & dong_cuoi).Value = txt_vitto.Text
        .Range("H" & dong_cuoi).Value = txt_mucbe.Text
        .Range("I" & dong_cuoi).Value = txt_pac.Text
        .Range("K" & dong_cuoi).Value = txt_clo.Text
        .Range("M" & dong_cuoi).Value = txt_kmno4.Text
        .Range("O" & dong_cuoi).Value = txt_dienluoi.Text
        .Range("P" & dong_cuoi).Value = txt_diennlmt.Text
        .Range("T" & dong_cuoi).Value = Combo_baocao.Text
        .Range("U" & dong_cuoi).Value = txt_note.Text
    End With
    cb_ngay.AddItem dong_cuoi - 5
    MsgBox " Chuc mung ban da hoan thanh nhap du lieu "
End Sub
Em làm như bác nhưng khi chạy thì ở Module lại báo lỗi không Show Userform lên được
Tôi viết qua. Bạn tự test kỹ.
Yêu cầu: tôi thấy là ngày trong SOLIEUVH bắt đầu từ A6 và là các ngày liên tiếp do bạn có công thức trả về các kết quả liên tiếp bắt đầu từ 1. Vậy code giả thiết là luôn như thế. Trong cb_ngay chỉ có các số 1, 2, ... vì SOLIEUVH là cho 1 tháng cụ thể nên chỉ cần liệt kê ngày thôi.

1. Thêm combobox và sửa name thành cb_ngay.

2. Thêm code
Mã:
Private Sub btn_sua_Click()
Dim curr_row As Long
    curr_row = cb_ngay.ListIndex + 6
    If curr_row < 6 Then Exit Sub
    With Sheet1
        .Range("B" & curr_row).Value = txt_nuoctho.Text
        .Range("C" & curr_row).Value = txt_nuocsach.Text
        .Range("D" & curr_row).Value = txt_mocay.Text
        .Range("E" & curr_row).Value = txt_kimlong.Text
        .Range("F" & curr_row).Value = txt_vitto.Text
        .Range("H" & curr_row).Value = txt_mucbe.Text
        .Range("I" & curr_row).Value = txt_pac.Text
        .Range("K" & curr_row).Value = txt_clo.Text
        .Range("M" & curr_row).Value = txt_kmno4.Text
        .Range("O" & curr_row).Value = txt_dienluoi.Text
        .Range("P" & curr_row).Value = txt_diennlmt.Text
        .Range("T" & curr_row).Value = Combo_baocao.Text
        .Range("U" & curr_row).Value = txt_note.Text
    End With
End Sub

Private Sub cb_ngay_Change()
Dim curr_row As Long
    curr_row = cb_ngay.ListIndex + 6
    If curr_row < 6 Then Exit Sub
    With Sheet1
        txt_nuoctho.Text = .Range("B" & curr_row).Value
        txt_nuocsach.Text = .Range("C" & curr_row).Value
        txt_mocay.Text = .Range("D" & curr_row).Value
        txt_kimlong.Text = .Range("E" & curr_row).Value
        txt_vitto.Text = .Range("F" & curr_row).Value
        txt_mucbe.Text = .Range("H" & curr_row).Value
        txt_pac.Text = .Range("I" & curr_row).Value
        txt_clo.Text = .Range("K" & curr_row).Value
        txt_kmno4.Text = .Range("M" & curr_row).Value
        txt_dienluoi.Text = .Range("O" & curr_row).Value
        txt_diennlmt.Text = .Range("P" & curr_row).Value
        Combo_baocao.Text = .Range("T" & curr_row).Value
        txt_note.Text = .Range("U" & curr_row).Value
    End With
End Sub

Private Sub UserForm_Initialize()
Dim lastRow As Long, k As Long, ngay()
    With ThisWorkbook.Worksheets("SOLIEUVH")
        lastRow = .Cells(Rows.Count, "T").End(xlUp).Row
        If lastRow < 6 Then Exit Sub
    End With
    ReDim ngay(1 To lastRow - 5, 1 To 1)
    For k = 1 To UBound(ngay)
        ngay(k, 1) = k
    Next k
    cb_ngay.List = ngay
End Sub

3. Sửa thành
Mã:
Private Sub btn_nhap_Click()
Dim dong_cuoi As Long
    dong_cuoi = Sheet1.Cells(Rows.Count, 4).End(xlUp).Row + 1
    With Sheet1
        .Range("B" & dong_cuoi).Value = txt_nuoctho.Text
        .Range("C" & dong_cuoi).Value = txt_nuocsach.Text
        .Range("D" & dong_cuoi).Value = txt_mocay.Text
        .Range("E" & dong_cuoi).Value = txt_kimlong.Text
        .Range("F" & dong_cuoi).Value = txt_vitto.Text
        .Range("H" & dong_cuoi).Value = txt_mucbe.Text
        .Range("I" & dong_cuoi).Value = txt_pac.Text
        .Range("K" & dong_cuoi).Value = txt_clo.Text
        .Range("M" & dong_cuoi).Value = txt_kmno4.Text
        .Range("O" & dong_cuoi).Value = txt_dienluoi.Text
        .Range("P" & dong_cuoi).Value = txt_diennlmt.Text
        .Range("T" & dong_cuoi).Value = Combo_baocao.Text
        .Range("U" & dong_cuoi).Value = txt_note.Text
    End With
    cb_ngay.AddItem dong_cuoi - 5
    MsgBox " Chuc mung ban da hoan thanh nhap du lieu "
End Sub
Làm nhu bác rồi nhưng lỗi ở Module không Show Userform lên được bác ạ
 
Upvote 0

File đính kèm

Upvote 0
Mình muốn thảo luận thêm với bạn về thiết kế trang tính chứa dữ liệu của bạn; Mà cụ thể là cột ghi ngày tháng năm
Hiện tại bạn đang dùng công thức & cọng 1 vô ngày trên nó;
Có nghĩa là 366 ngày trong năm đều có số liệu ư?
Kiểu này chỉ có ở CQ dự báo thòi tiết hay đài phát thanh truyền hình (?)

Nếu không thuộc các CQ như vậy, dữ liệu Ngày-tháng-năm nên nhập bằng tay từ TextBox của Form nhập liệu (hiện bạn đang có.)

:D.
 

File đính kèm

Lần chỉnh sửa cuối:
Upvote 0
Mình muốn thảo luận thêm với bạn về thiết kế trang tính chứa dữ liệu của bạn; Mà cụ thể là cột ghi ngày tháng năm
Hiện tại bạn đang dùng công thức & cọng 1 vô ngày trên nó;
Có nghĩa là 366 ngày trong năm đều có số liệu ư?
Kiểu này chỉ có ở CQ dự báo thòi tiết hay đài phát thanh truyền hình (?)

Nếu không thuộc các CQ như vậy, dữ liệu Ngày-tháng-năm nên nhập bằng tay từ TextBox của Form nhập liệu (hiện bạn đang có.)

:D.
Vâng cảm ơn bác góp ý. Đúng là ngày nào anh em công nhân vận hành sản xuất đều phải nhập số liệu vào báo cáo. Không phải 365 ngày mà 10 năm nay liên tiếp ngày nào cũng phải gửi mail bác ạ. Vì anh em công nhân người có học vấn phổ thông, người tự đào tạo và người thì chưa biết đến Excel. Do đó em có ý là muốn ngắn gọn mọi thao tác của anh em nhằm tránh mất Format của bảng tính và để đồng bộ với các nơi khác. Em quản lý cũng dễ hơn.
Thực sự em rất thích Excel và gần đây là lập trình VBA, dù mới khởi đầu nhưng hi vọng một ngày nào đó có thể lên 4room giúp đỡ được ai đó một vấn đề đơn giản nào đó là em vui lắm. Trân trọng cảm ơn các bác đã giúp đỡ.
 
Upvote 0
Vậy thì mình xin thảo luận tiếp với bạn từ những vấn đề nhò nhất từ file của bạn:
1./ Ở cột 'Ngày' của trang 'SoLieuVH' bạn đang cho định dạng là Custom là d/m/yy; Nên là "DD/MM/yyyy"

2./ Các TextBox của bạn đang có tên là txt_nuoctho, txt_nuocsach hay txt_mocay
Nên chăng ta gán những tên sau đây: tbNuocTho, tbNuocSach & tbMoCay
Điều lợi của vấn đề này là tránh tối đa sai chính tả khi nhập tên các TextBox này: Ta chỉ việc nhập tbnuoctho; VBE sẽ tự kiểm tra chính tả cho ta

Với mình các tiếp đầu ngữ của các tên của các Control nói chung nên là: tb: TextBox; lb: ListBox, cb: ComboBox,. . . Cmd: giành cho các nút lệnh.
Như vậy trên Form ta sẽ có lblNgay, lbNgay, hay cbNgay, . . . . đều tách bạch rõ ràng nhưng cô gọn nhất có thể.

2.1./ Cũng tương tự, tên tham biến cũng nên xúc tích hơn, như DongCuoi thay vì dong_cuoi như của bạn hiện nay
Vói mình thì trong trường hợp này tên biến có thể là 1 trong những tên sau: DongC, lRw, hay lRow mà thôi

3./ Bạn đa số nhấp số liệu vô trang tính nên thay vì viết :D .Range("C" & dong_cuoi).Offset(, off) = txt_nuocsach.Text
ta nên viết :D .Range("C" & dong_cuoi).Offset(, off) = txt_nuocsach.Value
 
Upvote 0
Vậy thì mình xin thảo luận tiếp với bạn từ những vấn đề nhò nhất từ file của bạn:
1./ Ở cột 'Ngày' của trang 'SoLieuVH' bạn đang cho định dạng là Custom là d/m/yy; Nên là "DD/MM/yyyy"

2./ Các TextBox của bạn đang có tên là txt_nuoctho, txt_nuocsach hay txt_mocay
Nên chăng ta gán những tên sau đây: tbNuocTho, tbNuocSach & tbMoCay
Điều lợi của vấn đề này là tránh tối đa sai chính tả khi nhập tên các TextBox này: Ta chỉ việc nhập tbnuoctho; VBE sẽ tự kiểm tra chính tả cho ta

Với mình các tiếp đầu ngữ của các tên của các Control nói chung nên là: tb: TextBox; lb: ListBox, cb: ComboBox,. . . Cmd: giành cho các nút lệnh.
Như vậy trên Form ta sẽ có lblNgay, lbNgay, hay cbNgay, . . . . đều tách bạch rõ ràng nhưng cô gọn nhất có thể.

2.1./ Cũng tương tự, tên tham biến cũng nên xúc tích hơn, như DongCuoi thay vì dong_cuoi như của bạn hiện nay
Vói mình thì trong trường hợp này tên biến có thể là 1 trong những tên sau: DongC, lRw, hay lRow mà thôi

3./ Bạn đa số nhấp số liệu vô trang tính nên thay vì viết :D .Range("C" & dong_cuoi).Offset(, off) = txt_nuocsach.Text
ta nên viết :D .Range("C" & dong_cuoi).Offset(, off) = txt_nuocsach.Value
Cảm ơn bác đã hướng dẫn và góp ý.
Em có 2 vấn đề muốn hỏi thêm bác
1 là tại sao khi em định dạng ngày tháng trong ComboBox là " DD/MM/yyyy" thì không lấy được dữ liệu từ bảng tính. Còn khi định dạng là" MM/DD/yyyy" thì lại lấy được?
2 là tại sao khi em khóa sheet thì chương trình lại báo lỗi Debug dòng này màu vàng
Rng.NumberFormat = "MM/DD/yyyy"
Khi không khóa sheet thì uf lại chạy được bình thường. Em có đính kèm file mong bác góp ý thêm. Cảm ơn bác
 

File đính kèm

Upvote 0
(1) Nếu ta có trong ComboBox dạng 'MM/DD/yyyy' thì ta có thể lấy ra
Còn như 'DD/MM/yyyy' thì nó tưởng là chuỗi, chắc vậy.

(2) Vậy sau khi khóa trang tính thì có thò tay vô định dạng ô hay vùng nào đó không (?)
 
Upvote 0
(1) Nếu ta có trong ComboBox dạng 'MM/DD/yyyy' thì ta có thể lấy ra
Còn như 'DD/MM/yyyy' thì nó tưởng là chuỗi, chắc vậy.

(2) Vậy sau khi khóa trang tính thì có thò tay vô định dạng ô hay vùng nào đó không (?)
(1) Nếu ta có trong ComboBox dạng 'MM/DD/yyyy' thì ta có thể lấy ra
Còn như 'DD/MM/yyyy' thì nó tưởng là chuỗi, chắc vậy.

(2) Vậy sau khi khóa trang tính thì có thò tay vô định dạng ô hay vùng nào đó không (?)
Trước em dùng code của bác Batman1 không duyệt theo ngày tháng mà duyệt theo số K = i + 1. Khóa trang tính và chạy vô tư. Chỉ là khi chọn ngày nó hiện lên số 1,2,3.... . Khi em sử dụng Code của bác thì chạy ổn với định dạng ngày được chọn là định dạng ngày tháng. Nhưng khi khóa sheet thì không chạy được. Mặc dù cột A không có công thức nào cả. Cái này bác có thể giải thích giúp em được không? Hay có cách nào khóa các ô công thức mà vẫn sử dụng được code trên không ạ. File ở trên em up lên mong anh chị em hướng dẫn thêm.
 
Upvote 0
Web KT

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

Back
Top Bottom