Nhờ giúp đỡ tạo Userform sửa, cập nhập và xóa dữ liệu

Trạng thái
Không mở trả lời sau này.

vbano1

SMod
Thành viên BQT
Mình không hiểu " Cấm chỉ post code" ?
Có nghĩa là mọi thành viên nếu viết code hỗ trợ cho bạn trong topic này sẽ bị xóa bài.
Chúng tôi nhận thấy rằng yêu cầu của bạn là:
1. Khác với yêu cầu ban đầu nêu ra trong topic này. Bạn đang vi phạm qui định post bài. Nếu là ý kiến khác, bạn phải lập topic mới.
2. Yêu cầu vừa rồi của bạn, ghi STT, bạn nên tự hoàn thành. Code của @giaiphapvba đã comment rất đầy đủ. Bạn nên đọc code và lý giải nó trước khi đưa ra yêu cầu khác.
3. Chúng tôi nhận thấy thứ bạn quan tâm lần này sẽ được giải quyết sau khi bạn đọc code của giaiphapvba và lý giải nó. Nếu bạn không làm vậy, những dòng code mà giaiphapvba viết là không có ý nghĩa. Việc giaiphapvba làm, là muốn bạn hiểu ra vấn đề. Nhưng bạn chỉ copy và sử dụng code mà không chịu lý giải.
 

tuhocvba

Administrator
Thành viên BQT
phamthach Cái này đơn giản mà.Mình đã biết được dòng cuối ở đâu rồi.Vậy lấy dòng cuối trừ đi 6 thế là ra số thứ tự.
Không phải bạn ấy không làm được việc đó. Mà là bây giờ form dữ liệu đã bị BIẾN ĐỔI hoàn toàn, có nghĩa là vị trí cột không còn như trước đây.
Vì vậy phải sửa lại code vì vị trí cột bị xê dịch rồi. Thêm cột mới, và lại thêm bên trái.
Đây là lỗi thiết kế. Bạn ấy sẽ tự làm được sau khi đọc và lý giải code mà diễn đàn đã hỗ trợ. Lỗi là ở bạn đấy, cho nên bạn ấy phải tự mình làm lại.
Ngoài ra, đây cũng là bài học cho mọi người. Khi thiết kế dữ liệu nên để vài cột trống bên trái và bên phải. Nếu sau này có cần thêm trường thông tin (thêm cột thông tin-đặc biệt là thêm vào bên trái dữ liệu), thì sửa code rất nhanh.
Bạn cần đăng nhập để thấy hình ảnh
 

phamthach

Yêu THVBA nhất
Có nghĩa là mọi thành viên nếu viết code hỗ trợ cho bạn trong topic này sẽ bị xóa bài.
Chúng tôi nhận thấy rằng yêu cầu của bạn là:
1. Khác với yêu cầu ban đầu nêu ra trong topic này. Bạn đang vi phạm qui định post bài. Nếu là ý kiến khác, bạn phải lập topic mới.
2. Yêu cầu vừa rồi của bạn, ghi STT, bạn nên tự hoàn thành. Code của @giaiphapvba đã comment rất đầy đủ. Bạn nên đọc code và lý giải nó trước khi đưa ra yêu cầu khác.
3. Chúng tôi nhận thấy thứ bạn quan tâm lần này sẽ được giải quyết sau khi bạn đọc code của giaiphapvba và lý giải nó. Nếu bạn không làm vậy, những dòng code mà giaiphapvba viết là không có ý nghĩa. Việc giaiphapvba làm, là muốn bạn hiểu ra vấn đề. Nhưng bạn chỉ copy và sử dụng code mà không chịu lý giải.
1. Mình công nhận là 2 câu hỏi gần đây đang không đúng với topic. Mình cũng đã nghĩ về việc ra topic mới. Nhưng trong câu hỏi mình có ghi rõ mình lấy VD 1 cách đơn giản để phục vụ cho topic lúc đầu vì vậy mình k lập topic mới.
2. Code của bạn @giaiphapvba mình cũng đã nêu là rất rõ ràng và sẽ dành thời gian để học chứ không phải chỉ copy. Và code của bạn ấy mình cũng đang sử dụng để xây dụng form theo topic.
3. Do chưa hoàn thiện dc form theo topic lên tạm thời xin ad đừng đóng topic để khi xong mình post file những gì mình đã nhờ bạn @Euler và bạn @giaiphapvba. Sau chắc ai đó sẽ cần
 

giaiphapvba

Administrator
Thành viên BQT
2. Code của bạn @giaiphapvba mình cũng đã nêu là rất rõ ràng và sẽ dành thời gian để học chứ không phải chỉ copy. Và code của
Theo mình thì bạn nên dành thời gian đọc trước khi hỏi sang vấn đề khác. Tại sao vấn đề 1 chưa xong lại sang vấn đề 2? Khi vấn đề 1 được nêu-chúng tôi hỗ trợ -> Bạn lý giải; rồi sau đó mới sang vấn đề 2. Mọi việc theo đúng trình tự như thế.
Hiện nay cách làm của bạn là:

Vấn đề 1 -> diễn đàn hỗ trợ -> bạn chưa lý giải
Dù chưa lý giải vấn đề 1, nhưng cũng nêu tiếp vấn đề 2.

Vậy, mục đích bạn đưa ra vấn đề 1 là gì, tại sao bạn không ngồi và đọc về Vấn đề 1. Tôi tin bạn hiểu Vấn đề 1 thì sẽ tự giải quyết được Vấn đề 2.

Có lý do gì để mọi người tiếp tục hỗ trợ vấn đề 2 cho bạn? Mục đích của bạn chẳng phải là học và hiểu vấn đề hay sao? Nếu là thuê viết code, tôi mong bạn hãy tìm nơi phù hợp. Chúng tôi không làm việc như vậy trên diễn đàn này. Đây là diễn đàn học tập. Và việc học tập thì có trình tự, hiểu bài 1 thì mới tiếp tục sang bài 2. Bài tập về nhà 1 chưa xong, lấy đáp án rồi hỏi tiếp bài tập về nhà 2, như thế thì bạn giống như một học sinh lười biếng. Diễn đàn không phải là công cụ để bạn sử dụng cho mục đích cá nhân (hoàn thiện công việc của mình với giá 0 đồng).
 

Euler

Administrator
Thành viên BQT
1. Đầu tiên, xin phép diễn đàn, cho phép tôi hỗ trợ code lần cuối. Ngay sau đó, topic này có thể close, không cần biết là chủ topic có đồng ý hay không. Hiện tại các vấn đề thảo luận đã đi quá xa so với mục đích ban đầu của tác giả.

2. Nhắn tới @phamthach : Đầu tiên, khi có vấn đề phát sinh, bạn nên nói:
"Xin lỗi mọi người. Vì có việc phát sinh, em có thể nhờ mọi người một lần nữa không ạ?"

Đầu tiên, bạn nên ý thức việc nhờ vả lần này là cực kỳ gây phiền hà cho người khác bởi các lý do sau:
1. Do bạn thiết kế chưa tốt, dẫn tới việc nhờ vả lặp lại -> Nếu bạn làm ở các công ty, mà nhờ vả đồng nghiệp thế này, họ có quyền từ chối.
2. Vì bạn mới học, cho nên nếu được hỏi "Bạn chưa thiết kế trước khi code à" thì bạn có thể trả lời:
Dạ, em nghĩ tới đâu thì làm tới đó ạ. -> Đây là vấn đề thường gặp với tất cả mọi người, tuy nhiên bạn nên cải thiện.
Nghe câu trả lời đó, thì dù có giận, rồi mọi người cũng giúp. Còn theo cách trả lời như bạn thì người ta không còn nhìn thấy thiện chí ấy.

Chú ý: Dù thiết kế thì sau đó vẫn có thể có thiếu sót. Do đó, nếu cần nhờ vả, câu đầu tiên nên là: Xin lỗi mọi người.
Nhìn thấy thiện chí đó, thì mọi người dù có trách mắng, nhưng rồi cũng giúp. Tôi mong bạn sẽ làm tốt hơn ở các lần sau.

Bạn có nghĩ việc comment từng dòng code có mất thời gian không? Tại sao mọi người phải mất thời gian làm điều ấy, vì cái gì? Do đó mọi người sẽ rất vui nếu việc làm tốn công tốn sức đó có chút ý nghĩa-bạn hiểu được và áp dụng được cho các bài toán tương tự.
Và nếu mọi người có tức giận, cũng là điều dễ hiểu, vì đã đặt kỳ vọng rằng bạn đã hiểu những gì diễn đàn hỗ trợ bạn, nhưng thực tế thì lại không được như vậy. Hiểu được điều này, bạn sẽ thấy anh chị em thật lòng mong mỏi bạn trưởng thành biết nhường nào.

Dưới đây là code:
Mã:
Sub tuhocvba0812()
    Dim ngay_tem            As String
    Dim tenhang_tem      As String
    Dim soluong_tem     As String
    Dim rend_data_tem   As Integer 'Dong cuoi cua sheet DATA
    Dim arr_tem                         As Variant
    Dim i                           As Long
    Dim mahang_tem      As String
    Dim dv_tem                  As String
    Dim flag_tem                As Boolean 'Tim thay ten hang tren sheet DATA
    Dim sh                          As String
    
    
    Const rtile_data_tem As Byte = 6 'Dong tieu de cua sheet DATA
    ngay_tem = UserForm1.TextBox1.Text
    tenhang_tem = UserForm1.ComboBox1.Text
    soluong_tem = UserForm1.TextBox2.Text
    sh = ActiveSheet.Name   'Lay ten sheet hien hanh: Sheet 2
    
    'Kiem tra
    If ngay_tem = "" Then
        MsgBox "Chua nhap ngay"
        Exit Sub
    End If
    If tenhang_tem = "" Then
        MsgBox "Chua nhap ten hang"
        Exit Sub
    End If
    If soluong_tem = "" Then
        MsgBox "Chua nhap so luong"
        Exit Sub
    End If
    If IsNumeric(soluong_tem) = False Then
        MsgBox "Ban phai nhap so luong la CHU SO" 'Ex: 1,2,3,..
        Exit Sub
    End If
    'nap du lieu sheet DATA
    ThisWorkbook.Sheets("DATA").Activate
    rend_data_tem = ThisWorkbook.Sheets("DATA").Cells(Rows.Count, 1).End(xlUp).Row
    If rend_data_tem <= rtile_data_tem Then
        MsgBox "sheet DATA khong co du lieu. Vui long kiem tra lai"
        Exit Sub
    End If
    arr_tem = ThisWorkbook.Sheets("DATA").Range(Cells(rtile_data_tem + 1, 1), Cells(rend_data_tem, 3)).Value 'Nap du lieu sheet DATA vao mang
    flag_tem = False
    For i = LBound(arr_tem, 1) To UBound(arr_tem, 1) Step 1
        If CStr(arr_tem(i, 2)) = tenhang_tem Then 'tim theo ten hang
            mahang_tem = CStr(arr_tem(i, 1)) 'lay ma hang
            dv_tem = CStr(arr_tem(i, 3)) 'Lay DVT
            flag_tem = True
            Exit For
        End If
    Next i
    If flag_tem = False Then
        MsgBox "Khong tim thay ten hang tren sheet DATA. Vui long kiem tra lai"
        Exit Sub 'Ket thuc chuong trinh
    End If
    'neu khong co van de gi thi ghi thong tin
    ThisWorkbook.Sheets(sh).Activate
    rend_data_tem = ThisWorkbook.Sheets(sh).Cells(Rows.Count, 1).End(xlUp).Row + 1 'Lay dong cuoi + 1
    'Ghi thong tin:
    '13/8/2019 sua code
    With ThisWorkbook.Sheets(sh)
        .Cells(rend_data_tem, 2) = ngay_tem 'ngay
        .Cells(rend_data_tem, 3) = mahang_tem 'ma hang
        .Cells(rend_data_tem, 5) = dv_tem 'DVT
        .Cells(rend_data_tem, 6) = soluong_tem 'So luong
        .Cells(rend_data_tem, 4) = tenhang_tem 'Tenhang
        'So thu tu
        For i = rtile_data_tem + 1 To rend_data_tem Step 1
            .Cells(i, 1) = i - rtile_data_tem
        Next i
    End With
End Sub
Các dòng code 64~68: vị trí cột tăng lên 1 so với trước vì bạn đã thay đổi định dạng sheet 2, các cột đã bị xê dịch. Tôi đã sửa.
Dòng code sau đó là đánh số thứ tự. Tôi đã bổ sung.
Bạn cần đăng nhập để thấy hình ảnh
 
Trạng thái
Không mở trả lời sau này.
Top