Anh chị chỉnh em from nhập liệu thu chi với ạ

Liên hệ QC

tranthung89

Thành viên mới
Tham gia
23/9/18
Bài viết
5
Được thích
0
Anh chị giúp đỡ em với, em viết form nhập liệu phiếu thu chi như mục tìm kiếm bị lỗi bị đơ 2021-09-27_214558.jpg
với lại em em mới tập làm from anh chị xem kiểm tra em cần bổ sung thêm gì để dữ liệu sửa cho em với ạ.
em cảm ơn ạ!
 

File đính kèm

  • 02.Data_Chi phi, doanh thu.xlsm
    830.2 KB · Đọc: 23
Lần chỉnh sửa cuối:
(1) Bạn đang chưa chuẩn dòng lệnh (mà mình đánh số 4)
PHP:
Private Sub tbtimkiemchiphi_Change()
 strSearch = LCase(tbtimkiemchiphi.Text)
 Dim rw As Range, r As Range
 
 Set r = Sheet3.Range("A4:C" & Sheet3.Range("A" & Rows.Count).End(xlUp).Row)
 With lbchiphi
    .Clear
4    For Each rw In r.Rows
        If InStr(LCase(Sheet3.Cells(rw.Row, 2) & Sheet3.Cells(rw.Row, 1)), strSearch) Then
            .AddItem Sheet3.Cells(rw.Row, 2).Value
            .List(lbchiphi.ListCount - 1, 1) = Sheet3.Cells(rw.Row, 1).Value
            .List(lbchiphi.ListCount - 1, 2) = Sheet3.Cells(rw.Row, 2).Value
        End If
    Next rw
 End With
End Sub

(2) Nên viết chân phương ở thuở ban đầu, ví dụ như trên, dễ kiểm soát sai hay lỗi chính tả, thiếu hay thừa trong các vòng lặp

(3) Chúc thành công!
 
(4) Trong 3 macro trên form của bạn đều có chứa các dòng lệnh này:
Mã:
 tbsochungtu.Text = "":          tbngaychungtu.Text = ""
 tbsohoadon.Text = "":           tbngayhd.Text = ""
 tblydo.Text = "":                   tbsotien.Text = ""
 tbtendoituong.Text = "":        tbmadoituong.Text = ""
 tbdiachi.Text = "":                 tbtenchiphi.Text = ""
 tbmacp.Text = ""

Chi bằng ta cô gọn lại bằng cách tạo ra 1 macro con có nội dung như sau:
PHP:
Sub GPEXoa()
 tbsochungtu.Text = "":          tbngaychungtu.Text = ""
 tbsohoadon.Text = "":           tbngayhd.Text = ""
 tblydo.Text = "":               tbsotien.Text = ""
 tbtendoituong.Text = "":        tbmadoituong.Text = ""
 tbdiachi.Text = "":             tbtenchiphi.Text = ""
 tbmacp.Text = ""
End Sub

Khi đó những nơi có những dòng lệnh này trên form, ta gọi macro con này; thí dụ:

Mã:
Private Sub cblammoi_Click()
    GPEXoa
    lbchiphi = Clear
    lbdoituong = Clear:             tbtimkiemchiphi = ""
    tbmadoituong = ""
End Sub

(4.1) Cũng tương tự như vậy, bạn nên thực hiện với quá trình chuyển dữ liệu từ các controls lên trang tính

Chúc thành công!
 
(1) Bạn đang chưa chuẩn dòng lệnh (mà mình đánh số 4)
PHP:
Private Sub tbtimkiemchiphi_Change()
 strSearch = LCase(tbtimkiemchiphi.Text)
 Dim rw As Range, r As Range
 
 Set r = Sheet3.Range("A4:C" & Sheet3.Range("A" & Rows.Count).End(xlUp).Row)
 With lbchiphi
    .Clear
4    For Each rw In r.Rows
        If InStr(LCase(Sheet3.Cells(rw.Row, 2) & Sheet3.Cells(rw.Row, 1)), strSearch) Then
            .AddItem Sheet3.Cells(rw.Row, 2).Value
            .List(lbchiphi.ListCount - 1, 1) = Sheet3.Cells(rw.Row, 1).Value
            .List(lbchiphi.ListCount - 1, 2) = Sheet3.Cells(rw.Row, 2).Value
        End If
    Next rw
 End With
End Sub

(2) Nên viết chân phương ở thuở ban đầu, ví dụ như trên, dễ kiểm soát sai hay lỗi chính tả, thiếu hay thừa trong các vòng lặp

(3) Chúc thành công!
Cảm ơn bạn, mình mới tập tành bạn có cách nào mà nó tối ưu được lỗi đó bạn giúp mình với
Bài đã được tự động gộp:

(4) Trong 3 macro trên form của bạn đều có chứa các dòng lệnh này:
Mã:
 tbsochungtu.Text = "":          tbngaychungtu.Text = ""
 tbsohoadon.Text = "":           tbngayhd.Text = ""
 tblydo.Text = "":                   tbsotien.Text = ""
 tbtendoituong.Text = "":        tbmadoituong.Text = ""
 tbdiachi.Text = "":                 tbtenchiphi.Text = ""
 tbmacp.Text = ""

Chi bằng ta cô gọn lại bằng cách tạo ra 1 macro con có nội dung như sau:
PHP:
Sub GPEXoa()
 tbsochungtu.Text = "":          tbngaychungtu.Text = ""
 tbsohoadon.Text = "":           tbngayhd.Text = ""
 tblydo.Text = "":               tbsotien.Text = ""
 tbtendoituong.Text = "":        tbmadoituong.Text = ""
 tbdiachi.Text = "":             tbtenchiphi.Text = ""
 tbmacp.Text = ""
End Sub

Khi đó những nơi có những dòng lệnh này trên form, ta gọi macro con này; thí dụ:

Mã:
Private Sub cblammoi_Click()
    GPEXoa
    lbchiphi = Clear
    lbdoituong = Clear:             tbtimkiemchiphi = ""
    tbmadoituong = ""
End Sub

(4.1) Cũng tương tự như vậy, bạn nên thực hiện với quá trình chuyển dữ liệu từ các controls lên trang tính

Chúc thành công!
Em cảm ơn Anh ạ
 
Cảm ơn bạn, mình mới tập tành bạn có cách nào mà nó tối ưu được lỗi đó bạn giúp mình với
Trước tiên nói về tên các tham biến hay tên các controls của bạn 1 tẹo:
(a) Có lúc thì ngắn quá, & có khi lại dài quá
Chú tâm sao cho nó ngắn nhất, nhưng đủ để gợi nhớ nhất, lấy ví dụ:
DongC, hay lRw thay vì dongcuoi;
Thay vì tbtimkiemchiphi, nên chăng tbTimKiemChiFi, thậm chí chỉ tbTKCF là thỏa rồi.
Nhưng có lúc lại ngắc quá như
Dim r As Range;
Chí ít là Dim R As Range, hay Dim Rng As Range, Cls As Range,. . . .
Có thể bạn chưa thấy lợi ích ngay đâu; Nhưng sau này bạn sẽ ngấm, mình tin là thế!

Còn lỗi đó bạn ngẫm thêm đi, nếu không ngợ ra thì sáng mai ta bàn tiếp
Nếu là mình thì mình sẽ viết vầy:
For Each Cls In Rng
 
Trước tiên nói về tên các tham biến hay tên các controls của bạn 1 tẹo:
(a) Có lúc thì ngắn quá, & có khi lại dài quá
Chú tâm sao cho nó ngắn nhất, nhưng đủ để gợi nhớ nhất, lấy ví dụ:
DongC, hay lRw thay vì dongcuoi;
Thay vì tbtimkiemchiphi, nên chăng tbTimKiemChiFi, thậm chí chỉ tbTKCF là thỏa rồi.
Nhưng có lúc lại ngắc quá như
Dim r As Range;
Chí ít là Dim R As Range, hay Dim Rng As Range, Cls As Range,. . . .
Có thể bạn chưa thấy lợi ích ngay đâu; Nhưng sau này bạn sẽ ngấm, mình tin là thế!

Còn lỗi đó bạn ngẫm thêm đi, nếu không ngợ ra thì sáng mai ta bàn tiếp
Nếu là mình thì mình sẽ viết vầy:
For Each Cls In Rng
Cảm ơn bạn đã góp ý, mình suy nghĩ và sửa lại có gì không hiểu mai bạn giúp mình với.
 
Xung quanh 2 TextBox 'Mã chi phí' & 'Ten CF' trong form 'Thu_Chi' của bạn:

Thứ nhất: Tên nên trực quan hơn, ví dụ sao không là tbMaCP hay tbMaCF mà lại là tbmacp; Cũng tương tự, nên là tbTenCF cho nó lành (ở chổ nhìn vô là phân biết ra liền, cho dù U75).

Thứ nhì, trong file của bạn đã co danh mục [Mã CF - Tên CF]; Vậy nên theo mình nên dùng ComboBox 2 cột thay vì 2 TextBox như hiện nay;
Cái lợi trước mắt là ta bớt đi được 1 dấu hoa thị (*) ghi chú buột nhập, thứ nữa là giúp ta không bao giờ sai chính tả ngớ ngẫn khi nhập vô TextBox như hiện nay dễ gặp hay mất thời gian nhỏ nhoi nào đó để kiểm tra hoặc tốn thêm cho bộ nhớ của người vận hành nhập;

Thứ 3 (Nói về danh mục [Mã CF & Tên CF]):
(a) Tên trang tính là quá dài (& không cần thiết), sao không là 'DMuc' là đủ đầy?
(b) Mã CF của bạn đang gồm 2 phần, phân cách nhau bỡi "-"; Kể ra mà nói dấu "-" không nên xài trong trường hợp này; nếu phải xài thì nên là "_";
(c) Cái nữa ta có thể bỏ luôn nó đi, vì phần đầu của bạn bao giờ cũng 2 ký tự; Cho nên ai cũng hiểu kí tự thứ 3 trở đi là của phần 2 (Mình thường gọi 2 phần này là Đặc tính & định trị)
& thêm nữa phần đặc tính của bạn chỉ nên 1 ký tự, thay vì 2 như bây giờ. Lí do là bạn chưa đến mươi loại đặc tính; & ta hoàn toàn xài chữ cái để biểu đạt phần đặc tính này, như B là bán hàng; S là sản xuất, . . . .

Ngoài lề 1 chút như sẵn đây xin nói luôn: Tên trang tính của bạn quá dài đến không cần thiết; Nên chăng chỉ là DLChiFi, DLDThu,. . . . ; Nếu là mình thì bỏ luôn tiếp đầu ngữ DL đó đi cho nó lành!

Bạn đang có 1 form & 1 trang tính để chứa DL (dữ liệu) nhập từ form đó; Nhưng bạn chưa nhập dòng DL nào; (Cũng có khi bạn nhập thử rồi nhưng đã xóa đi khi đưa lên DĐ), Theo mình bân nên nhập giả lập gần chục dòng DL để mọi người thấy được kiểu DL nhập đó như thế nào, & . . . . .

Thân ái!
 
Xung quanh 2 TextBox 'Mã chi phí' & 'Ten CF' trong form 'Thu_Chi' của bạn:

Thứ nhất: Tên nên trực quan hơn, ví dụ sao không là tbMaCP hay tbMaCF mà lại là tbmacp; Cũng tương tự, nên là tbTenCF cho nó lành (ở chổ nhìn vô là phân biết ra liền, cho dù U75).

Thứ nhì, trong file của bạn đã co danh mục [Mã CF - Tên CF]; Vậy nên theo mình nên dùng ComboBox 2 cột thay vì 2 TextBox như hiện nay;
Cái lợi trước mắt là ta bớt đi được 1 dấu hoa thị (*) ghi chú buột nhập, thứ nữa là giúp ta không bao giờ sai chính tả ngớ ngẫn khi nhập vô TextBox như hiện nay dễ gặp hay mất thời gian nhỏ nhoi nào đó để kiểm tra hoặc tốn thêm cho bộ nhớ của người vận hành nhập;

Thứ 3 (Nói về danh mục [Mã CF & Tên CF]):
(a) Tên trang tính là quá dài (& không cần thiết), sao không là 'DMuc' là đủ đầy?
(b) Mã CF của bạn đang gồm 2 phần, phân cách nhau bỡi "-"; Kể ra mà nói dấu "-" không nên xài trong trường hợp này; nếu phải xài thì nên là "_";
(c) Cái nữa ta có thể bỏ luôn nó đi, vì phần đầu của bạn bao giờ cũng 2 ký tự; Cho nên ai cũng hiểu kí tự thứ 3 trở đi là của phần 2 (Mình thường gọi 2 phần này là Đặc tính & định trị)
& thêm nữa phần đặc tính của bạn chỉ nên 1 ký tự, thay vì 2 như bây giờ. Lí do là bạn chưa đến mươi loại đặc tính; & ta hoàn toàn xài chữ cái để biểu đạt phần đặc tính này, như B là bán hàng; S là sản xuất, . . . .

Ngoài lề 1 chút như sẵn đây xin nói luôn: Tên trang tính của bạn quá dài đến không cần thiết; Nên chăng chỉ là DLChiFi, DLDThu,. . . . ; Nếu là mình thì bỏ luôn tiếp đầu ngữ DL đó đi cho nó lành!

Bạn đang có 1 form & 1 trang tính để chứa DL (dữ liệu) nhập từ form đó; Nhưng bạn chưa nhập dòng DL nào; (Cũng có khi bạn nhập thử rồi nhưng đã xóa đi khi đưa lên DĐ), Theo mình bân nên nhập giả lập gần chục dòng DL để mọi người thấy được kiểu DL nhập đó như thế nào, & . . . . .

Thân ái!
Cảm ơn bạn nhiều, mình ngồi chỉnh lại mình gửi qua bạn xem qua xem thế nào. Chúc bạn ngày mới nhiều niềm vui
 
Web KT
Back
Top Bottom