[Xin giúp đỡ] Giúp mình code nhập liệu này với

Liên hệ QC

nguyendak45

Thành viên mới
Tham gia
7/5/10
Bài viết
13
Được thích
0
Các bác giúp e mã lệnh này với ạ, e làm nhưng hình như nó không chạy. Code này e sửa lại của 1 bạn trên diễn đàn, do chưa biết nhiều về VBA nên làm còn lỗi. Ai hảo tâm giúp đỡ mình vs được không ạ.
Lần trước post nhầm chỗ, bị các mod nhắc nhở, hi vọng lần này là đúng./-*+/
 

File đính kèm

Bạn thử đoạn Code này nếu ưng ta sử lý tiếp (Giờ mình phải đi họp rồi. Rất có thể cái đoạn Dsach địa chỉ ô thiếu hoặc không đúng trình tự bạn kiểm tra giúp)

Mã:
Sub NhapLieu()
Dim Ch, Dc, Rg As Range
Ch = "B7;B9;B10;B11;B12;B13;B14;B16;B17;B18;B19;B20;B21;B22;B23;B24;B24;B26;B27;B29;B30;B31;B32;B33;"
Ch = Ch & "B34;B35;B36;B37;B38;B39;B40;B41;B42;B43;B44;B45;B46,B48;B49;B50;B51;B52;B53;B54;B55;B56"
Dc = Split(Ch, ";")
Set Rg = Sheet2.[b65536].End(3).Offset(1, -1)
For i = 0 To UBound(Dc)
Rg.Offset(, i + 1) = Sheet1.Range(Dc(i))
Sheet1.Range(Dc(i)) = ""
Next
End Sub
Để chuẩn xác, bạn điền vào từng cột trên sheet Bang Tong Hop địa chỉ tương ứng tren Sheet Form (Ví dụ: Cột B ghi B7) và đánh dấu các cột bắt buộc có dữ liệu thì dựa vào đó mình có thể đảm bảo nhập hoàn toàn chính xác cho bạn và có kiểm tra trước khi nhập.
 
Lần chỉnh sửa cuối:
Upvote 0
Bạn thử đoạn Code này nếu ưng ta sử lý tiếp (Giờ mình phải đi họp rồi. Rất có thể cái đoạn Dsach địa chỉ ô thiếu hoặc không đúng trình tự bạn kiểm tra giúp)

Mã:
Sub NhapLieu()
Dim Ch, Dc, Rg As Range
Ch = "B7;B9;B10;B11;B12;B13;B14;B16;B17;B18;B19;B20;B21;B22;B23;B24;B24;B26;B27;B29;B30;B31;B32;B33;"
Ch = Ch & "B34;B35;B36;B37;B38;B39;B40;B41;B42;B43;B44;B45;B46,B48;B49;B50;B51;B52;B53;B54;B55;B56"
Dc = Split(Ch, ";")
Set Rg = Sheet2.[b65536].End(3).Offset(1, -1)
For i = 0 To UBound(Dc)
Rg.Offset(, i + 1) = Sheet1.Range(Dc(i))
Sheet1.Range(Dc(i)) = ""
Next
End Sub
Để chuẩn xác, bạn điền vào từng cột trên sheet Bang Tong Hop địa chỉ tương ứng tren Sheet Form (Ví dụ: Cột B ghi B7) và đánh dấu các cột bắt buộc có dữ liệu thì dựa vào đó mình có thể đảm bảo nhập hoàn toàn chính xác cho bạn và có kiểm tra trước khi nhập.

Mình gửi lại bạn file mình ghi mã của bạn, nhưng hình như nó vẫn chưa chạy. Và cho mình hỏi 1 chút, cái mã lệnh Dc= split... Cái Split để làm gì thế ạ.
Mình đánh dấu các ô mà bắt buộc điền có màu đỏ nhé. Còn 1 điều nữa là cái check box, nó chỉ trả về giá trị true và false thôi à, mình muốn nó thay đổi thành ký tự khác có được không?
 
Upvote 0
Hàm Split để chia cái chuỗi đó thành mảng.
Mình tham gia thêm, các combobox đều có thể thay bằng Validation vậy không nên dùng vì khi nhập liệu điều khiển con trỏ rất khó khăn. Cái Form của bạn nên làm gọn gàng lại vừa Mỹ quan vừa thuận tiện. CheckBox cũng vậy, hoàn toàn có thể thay thế bằng chính các ô. Còn việc hiện các giá trị tại ô liên kết là do ta chủ động thiết lập.

Không thấy file của bạn đâu cả?
 
Lần chỉnh sửa cuối:
Upvote 0
Hàm Split để chia cái chuỗi đó thành mảng.
Mình tham gia thêm, các combobox đều có thể thay bằng Validation vậy không nên dùng vì khi nhập liệu điều khiển con trỏ rất khó khăn. Cái Form của bạn nên làm gọn gàng lại vừa Mỹ quan vừa thuận tiện. CheckBox cũng vậy, hoàn toàn có thể thay thế bằng chính các ô. Còn việc hiện các giá trị tại ô liên kết là do ta chủ động thiết lập.

Không thấy file của bạn đâu cả?
Sory, mình quên không up lên. Tại mình không biết dùng validation. Tại dùng cái control box nó dễ vẽ hơn. Còn phần check box ý mình là làm thế để sau này phân loại cho dễ. Mình chưa nghĩ được cách nào tốt hơn.
 

File đính kèm

Upvote 0
Bạn thử Code sau:
Mã:
Private Sub NL_Click()
Dim Ch, Dc, Rg As Range
Ch = "B7;B9;B10;B11;B12;B13;B14;B44"
Dc = Split(Ch, ";")
For i = 0 To UBound(Dc)
If Sheet1.Range(Dc(i)) = "" Then
MsgBox "Ban chua nhap o: " & Dc(i)
Sheet1.Range(Dc(i)).Select
Exit Sub
End If
Next
Ch = "B7;B9;B10;B11;B12;B13;B14;B16;B17;B18;B19;B20;B21;B22;B23;B24;B25;B26;B27;B44;B45;B46;B47;B29;B30;B31;"
Ch = Ch & "B32;B33;B34;B35;B36;B37;B38;B39;B40;B41;B42;B43;B49;B50;B51;B52;B53;B54;B55;B56;B57;B59"
Dc = Split(Ch, ";")
Set Rg = Sheet2.[b65536].End(3).Offset(1, -1)
For i = 0 To UBound(Dc)
Rg.Offset(, i + 1) = Sheet1.Range(Dc(i))
Sheet1.Range(Dc(i)) = ""
Next
End Sub
 

File đính kèm

Upvote 0
Cảm ơn bạn đã giúp mình, mình hỏi một chút, tất cả các ô của bạn đều sử dụng code gì vậy? Hay dùng validation, mình không thấy chỗ sửa đâu cả. Bên nhập liệu mình muốn thay đổi thuộc tính của một ô thì mình làm cách nào, bạn hướng dẫn mình cũng được, để mình tự làm. Ví dụ như các ô nhập số, mình muốn thay đổi định dạng số thay vì 100000 bằng 100.000 ý.

Mình hỏi thêm 1 ý là cái control box thì không hiển thị tiếng việt được đúng không ạ? Vì mình thấy bạn làm cái nhập nó hiển thị được tiếng việt.
 
Lần chỉnh sửa cuối:
Upvote 0
1/Toàn bộ các Combobox được thay bằng Validation. Muốn tham khảo bạn gõ từ này vào ô tìm kiếm có đủ các bài, thậm chí rất nhiều là khác. Mình không có thêm bất kỳ code nào khác.
2/Định dang số thì bạn cứ định dạng bình thường như mọi ô Excel khác.
3/Combobox hoàn toàn hiển thị tốt tiếng Việt, vấn đề là chọn Font của Combobox phù hợp với phần mềm tiếng Việt bạn sử dụng mà thôi.
 
Upvote 0
Cảm ơn bạn, nhưng ý của mình là bạn them code gì đó làm mọi thứ trên thanh công cụ bị ẩn đi. Mình không định dạng số được. Tại chuột phải không cho chọn Format Cell

Hi2, mình làm được rùi. Do bạn khóa nên mình k biết, mình gà quá. Cảm ơn lần nữa nhé.
 
Lần chỉnh sửa cuối:
Upvote 0
Mục đích khoá là để mỗi khi Enter con trỏ không chạy khắp sheet mà chỉ di chuyển trong các ô nhập liệu không khoá mà thôi
 
Upvote 0
Mục đích khoá là để mỗi khi Enter con trỏ không chạy khắp sheet mà chỉ di chuyển trong các ô nhập liệu không khoá mà thôi
Cảm ơn bạn, mình chưa được hiểu đoạn code này, bạn giải thích rõ hơn từng câu lệnh được không ạ
Next
Ch = "B7;B9;B10;B11;B12;B13;B14;B16;B17;B18;B19;B20;B21;B22;B23;B24;B25;B26;B27;B44;B45;B46;B47;B29;B30;B31;"
Ch = Ch & "B32;B33;B34;B35;B36;B37;B38;B39;B40;B41;B42;B43;B49;B50;B51;B52;B53;B54;B55;B56;B57;B59"
Dc = Split(Ch, ";")
Set Rg = Sheet2.[b65536].End(3).Offset(1, -1)
For i = 0 To UBound(Dc)
Rg.Offset(, i + 1) = Sheet1.Range(Dc(i))
Sheet1.Range(Dc(i)) = ""
Next
 
Upvote 0
Ch = "B7;B9;B10;B11;B12;B13;B14;B16;B17;B18;B19;B20;B21 ;B22;B23;B24;B25;B26;B27;B44;B45;B46;B47;B29;B30;B 31;"
Ch = Ch & "B32;B33;B34;B35;B36;B37;B38;B39;B40;B41;B42;B43;B 49;B50;B51;B52;B53;B54;B55;B56;B57;B59"
(Gán biến Ch bằng chuỗi nối tất cả các ô cần lấy DL và cách nhau bởi ";")
Dc = Split(Ch, ";")
(Dùng hàm split để chia chuỗi thành mảng mà các phần tử là địa chỉ ô)

Cả 3 đoạn lệnh trên có thể thay bằng:

Dc=Array("B7","B9",....."B59")




Set Rg = Sheet2.[b65536].End(3).Offset(1, -1)
For i = 0 To UBound(Dc)
(Cho 1 biến chạy từ 0 đến số phần tử mảng)
Rg.Offset(, i + 1) = Sheet1.Range(Dc(i))
(Gán ô bằng vùng theo mảng địa chỉ thứ i)
Sheet1.Range(Dc(i)) = ""
(Gán vùng theo địa chỉ mảng thứ i="")
Next

Nôm na vậy, mong bạn hiểu
 
Lần chỉnh sửa cuối:
Upvote 0
Set Rg = Sheet2.[b65536].End(3).Offset(1, -1)
For i = 0 To UBound(Dc)
(Cho 1 biến chạy từ 0 đến số phần tử mảng)
Rg.Offset(, i + 1) = Sheet1.Range(Dc(i))
(Gán ô bằng vùng theo mảng địa chỉ thứ i)
Mình muốn hỏi dòng này, [b65536] có phải chỉ ô cuối cùng của cột B không ạ. Thế cái câu End(3) để làm gì thế bác.
 
Upvote 0
Mình muốn hỏi dòng này, [b65536] có phải chỉ ô cuối cùng của cột B không ạ. Thế cái câu End(3) để làm gì thế bác.
Đúng với Exc 2003 chứ chung cho 2003 và 2007 phải dùng Cells(Rows.Count,"A")
.End(3) tương đương End(xlUp): Nó trả vê ô cuối cùng có dữ liệu theo cột của ô xuất phát.
 
Lần chỉnh sửa cuối:
Upvote 0
Web KT

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

Back
Top Bottom