Các bác xem dùm e đoạn code sau bị lỗi gì dùm, khi e nhập dữ liệu click vào nút nhập thì báo lỗi dòng màu xanh, code trước đó chạy bình thường, e chỉ thêm dòng màu đỏ vào báo lỗi
Private Sub Com_INPUT_Click()
...
f = Trim(NAMEFG.Text)
...
For Each chk In LINE_INPUT.Controls
If chk.Value Then
SheetSel = True
Set currSheet = Sheets(chk.Caption)
Set lastCell = currSheet.[E65536].End(xlUp).Offset(1)
If Me.SHIFT = "31" And Hour(Now) >= 21 And Hour(Now) < 24 Then
ngay = Format(Now + 1, "Short Date")
Else
ngay = Format(Now, "Short Date")
End If
currCode = chk.Tag & Left(f, 1) ' code tu danh ID tang dan theo ngay, xem tag trong checkbox
With lastCell
index = 0
If .Row > 2 Then <-- A
If .Offset(-1, -3) = ngay Then <-- C
index = Replace(.Offset(-1).Value, currCode, "") '??danh so tu dong theo ngay,ket hop Tag =ki hieu line
End If
End If
.Value = currCode & index + 1 <-- B
...
End Sub
1. Bạn
Hoàng Trọng Nghĩa đã hứa trong bài #28 thì bạn cố chờ đơi một chút.
2. Những ai giúp bạn bây giờ sẽ rất mệt. Bạn không thể bê nguyên code của tôi ở chủ đề khác vào chủ đề này mà không sửa lại. Còn nếu bạn tự sửa thì chưa chắc đã sửa hết những chỗ cần sửa. Ví dụ điển hình là bạn không sửa những chỗ đỏ đỏ như trong bài #27 của tôi.
Code ở bài kia tôi viết khi cấu trúc dòng cột trên sheet là hoàn toàn khác. Vd. ở "bên kia" dòng dữ liệu đầu tiên bắt đầu từ dòng 2 (tiêu đề là dòng 1), vì thế tôi có If lastCell.Row > 1 Then. Nhưng "ở đây" bạn có tiêu đề là dòng 2 nên phải sửa lại thành If lastCell.Row > 2 Then (và 2 chỗ tiếp theo như ở bài #27) nhưng bạn không sửa.
Bây giờ giúp bạn mệt vì cũng có nhiều chỗ bạn bê nguyên từ chủ đề kia mà không sửa, vd. chỗ
<-- A
phải thành
If .Row > 3 Then
3. Bạn đổi gì thì cũng phải suy nghĩ. Bạn hãy phân tích 2 trường hợp: code cũ, code mới.
Giả dụ với sheet nào đó thì checkbox được gán cho nó có chk.Tag = "XYZ". Tôi không biết bạn sẽ nhập gì trong textbox NAMEFG nhưng giả dụ là 1 text nào đó.
3a. code cũ với currCode = chk.Tag. Giả dụ hôm nay là ngày mới
1. Nhập dòng dữ liệu đầu tiên với NAMEFG.Text = "hichic".
Ta có currCode = chk.Tag = "XYZ". Tại dòng <-- B ta có: (lastCell).Value = currCode & index + 1 = "XYZ" & 1 = "XYZ1"
2. Nhập dòng dữ liệu thứ hai với NAMEFG.Text = "tenten".
Ta có currCode = chk.Tag = "XYZ"
Do cùng ngày nên đk tại dòng <-- C thỏa và dòng lệnh sau được thực hiện:
index = Replace(.Offset(-1).Value, currCode, "") = Replace("XYZ1", "XYZ", "") = 1
Tức index = 1 và tại dòng <-- B có: (lastCell).Value = currCode & index + 1 = "XYZ" & 2 = "XYZ2"
3b. code mới với currCode = chk.Tag & Left(f, 1) = chk.Tag & Left(NAMEFG.Text, 1) . Giả dụ hôm nay là ngày mới
1. Nhập dòng dữ liệu đầu tiên với NAMEFG.Text = "hichic".
Ta có currCode = "XYZh". Tại dòng <-- B ta có: (lastCell).Value = currCode & index + 1 = "XYZh" & 1 = "XYZh1"
2. Nhập dòng dữ liệu thứ hai với NAMEFG.Text = "tenten".
Ta có currCode = "XYZt"
Do cùng ngày nên đk tại dòng <-- C thỏa và dòng lệnh sau được thực hiện:
index = Replace(.Offset(-1).Value, currCode, "") = Replace("XYZh1", "XYZt", "") = "XYZh1" do chuỗi "XYZt" không có trong chuỗi "XYZh1".
Tức index = "XYZh1". Cái này không "qua mặt VBA" được là đúng vì làm sao có thể nhập chuỗi vào biến LONG được?
-----------------
Trong chủ đề này tôi không đọc toàn bộ code từ A --> Z. Tôi chỉ xét đoạn code mà bạn đưa lên thôi. Tôi đã 1 lần mất rất nhiều thời gian vô ích nên bây giờ không muốn "sa lầy" nữa.
-----------------
Ở chủ đề kia tôi đã quyết định viết code cho bạn từ đầu tới cuối vì thế tôi đã cố gắng moi hết thông tin. Nếu bạn đưa sheet, form thiết kế như trong thực tế, tức cấu trúc dòng, cột, bảng trên sheet, các controls trên form y như thực tế, thì bạn đã có code hoàn chỉnh rồi. Bây giờ để viết thêm hay sửa code của bạn thì phải kiểm tra lại từ đầu, sẽ rất mệt.
Bạn nên rút kinh nghiệm. Dữ liệu bạn cứ vô tư giả lập: tên, số lượng có thể bịa, xóa bớt. Nhưng đã là cả 1 project hoàn chỉnh thì khi đưa cho người khác giúp phải đưa cấu trúc hoàn chỉnh, y hệt như thực tế.