Mình có 1 Form số liệu mà nếu nhập bằng cách trực tiếp thì rất dài và mất thời gian, còn nếu dùng lệnh Form của Excel thi nó không thể hiện hết nổi các sheet và phải dùng Tab mới chuyển được.
Mình muốn tạo 1 Form riêng để nhập số liệu tiết kiệm thời gian hơn bằng cách hễ mình nhập trong Form của mình là nó sẽ tự cập nhật qua sheet tổng hợp, nhập xong mình xóa đi nhập dữ liệu khác là nó tự động xuống 1 hàng để chuyển tiếp dữ liệu mà không mất đi dữ liệu của mình. Mình có đính kèm file để các bạn xem thử ?
Không biết Excel có làm được cái này không nhỉ? Các bạn xem và giúp mình nhé.
Ok mọi người đã nhắc nhở em xin rút kinh nghiệm còn về VBA thì em không biết làm chỉ làm thủ công đặt công thức như vậy
Có gì mong mọi người giúp đở xin chân thành cám ơn
Bạn hay xài câu lệnh On Error Resume Next; Vậy xin hỏi bạn bạn đã biết lỗi đã gặp hay chưa mà bảo macro nó Resume Next?
Mình thường cài câu lệnh này theo kiểu như sau:
PHP:
Private Sub UserForm_Initialize()
' On Error Resume Next '
On Error GoTo LoiCT
sArray = Sheet1.Range("A3:K" & Sheet1.[A65536].End(xlUp).Row).Value
LBDMVT.List() = sArray
With LBDMVT
.List = sAray
.ListStyle = fmListStyleOption
.MultiSelect = fmMultiSelectMulti
End With
Err_: Exit Sub
LoiCT:
If Err = 13 Then
Resume Next
Else
MsgBox Err, , Error
Resume Err_
End If
End Sub
Sửa cho bạn thì chỉ là hại bạn về lâu dài thôi.
Theo mình bạn tự tìm ra các lỗi (còn nhiều lắm) & khắc phục hết cho trơn tru
Bạn có thể đánh số các dòng lệnh & tìm ra những dòng lênh đang báo lỗi bỡi hàm Erl()
Ngay trong macro mình trích của bạn hình như tối thiểu là 2 lỗi kia đấy.
& mình nhắn bạn là viết các dòng lệnh phải đầy đủ; Biến nên khai báo tường minh,. . . .
Đừng bắt chước thầy dạy & học theo trường phái cách viết của thầy, 1 khi bạn ít vốn tự có . . . .
Tựu chung là "Thất bại là mẹ thành công!"
Tôi chỉ góp ý cho bạn 2 điểm. Tôi không phân tích các lỗi khác.
1. Về lỗi 424. Bạn có
Mã:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
With Target
If .Row > 1 And .Count = 1 And .Column = 1 And .Value = "" Then
FrmDMHH.Show
End If
End With
Cancel = False
End Sub
Code muốn hiển thị form FrmDMHH nhưng không có form như thế. Chỉ có form FrmDMVT mà thôi. Lỗi quá dễ hiểu.
Tôi đã làm hiện được UserForm lên rồi còn cái (Chọn vào công việc hiện trong UserForm để tự chèn ra dòng tương ứng) trong bảng thì thực sự mù tịt ko làm được mong mọi người giúp đỡ. Xim cám ơn
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Cancel = True
With Target
If .Row > 1 And .Count = 1 And .Column = 1 And .Value = "" Then
FrmDMHH.Show
End If
End With
Cancel = False
End Sub
Tôi đã làm (1) hiện được UserForm lên rồi còn cái (Chọn vào công việc hiện trong UserForm để tự chèn ra dòng tương ứng) trong bảng thì thực sự mù tịt ko làm được (2) mong mọi người giúp đỡ.
(1) Cái Form hiện lên như bạn nói tiềm ẩn nhiều nguy cơ vì bạn đang bỏ qua lỗi có mã là 381
Trong CS Immidiate nó thể hiện như sau:
PHP:
?Error(381)
Could not set the List property. Invalid property array index.
Nếu bạn sửa & thêm số cho các dòng lênh của macro này bạn sẽ thấy lỗi ở dòng nào:
Mã:
Private Sub UserForm_Initialize()
' On Error Resume Next '
On Error GoTo LoiCT
1 sArray = Sheet1.Range("A3:K" & Sheet1.[A65536].End(xlUp).Row).Value
2 LBDMVT.List() = sArray
With LBDMVT
4 .List = sAray
5 .ListStyle = fmListStyleOption
6 .MultiSelect = fmMultiSelectMulti
End With
Err_: Exit Sub
LoiCT:
If Err = 381 Then
MsgBox Error$(Err), , Erl
Else
MsgBox Err: Resume Err_
End If
End Sub
(Đang báo lỗi ở dòng lệnh mang số 4 đó bạn; Xin nhấn mạnh là nó báo ở dòng 4, chứ mình không khẳng định là dòng 4 đang lỗi à nha!)
Tất nhiên nên có Cancel = False khi đúp chuột ở những cột <> cột A để cell sẽ ở chế độ EDIT. Vì điều này mà ta không thiết lập Cancel (mặc định là False), hoặc có thiết lập (thừa) thì cũng chỉ Cancel = False mà thôi. Nhưng khi kiểm tra thấy đúp chuột ở cột A thì hiện Form và nên có Cancel = True để bỏ chế độ EDIT cho các cell ở cột A. Tất nhiên việc bỏ hay không chế độ EDIT cho cột A là tùy vào dụng ý của chủ thớt. Nhưng với các cột <> A thì nên để chế độ EDIT (thiết lập False hoặc không thiết lập gì).
Với dụng ý cụ thể như trên thì
Mã:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
With Target
If ... Then
FrmDMVT.Show
Cancel = True
End If
End With
' Cancel = False
End Sub
Tất nhiên việc thêm Cancel = True là thừa nhưng không gây tổn hại gì. Nhưng ý tôi là nó cho thấy là chủ thớt không hiểu chuyện.
Gửi bạn file này tham khảo. Trong file có dùng đến macro, vì vậy để mở được, bạn vào Tôls/Macro/Security, đánh dấu kiểm vào Medium. Đóng Excel và mở file, nhớ chọn Ena...Macro(nút ở giữa)
Sau khi nhập liệu vào Form bạn nhấn nút "Nhap Lieu", dử liệu từ form của bạn sẽ tự động chuyển sang Sheet Tổng hợp và các ô trong form tự động xóa để bạn nhập dữ liệu mới
Yêu cầu phải nhập đủ dữ liệu trong form roi mói nhan nút Nhap Lieu, neu không sẽ có thông báo nhắc nhở bạn
Chúc vui với bài tập này. Muốn xem Macro, nhấn Alt+F11
Thân
Bạn cho mình hỏi, với file này của bạn, mình có copy và chỉnh code để phù hợp với file của mình, nhưng như cầu của mình có khác 1 xíu, đó là sau khi nhập ở sheet FORM, bấm "NHẬP LIỆU" thì dữ liệu được copy sang "Bang Tong Hop", nhưng dữ liệu trong sheet FORM ko tự động xóa, bạn có thể hướng dẫn mình chút với
Gửi bạn file này tham khảo. Trong file có dùng đến macro, vì vậy để mở được, bạn vào Tôls/Macro/Security, đánh dấu kiểm vào Medium. Đóng Excel và mở file, nhớ chọn Ena...Macro(nút ở giữa)
Sau khi nhập liệu vào Form bạn nhấn nút "Nhap Lieu", dử liệu từ form của bạn sẽ tự động chuyển sang Sheet Tổng hợp và các ô trong form tự động xóa để bạn nhập dữ liệu mới
Yêu cầu phải nhập đủ dữ liệu trong form roi mói nhan nút Nhap Lieu, neu không sẽ có thông báo nhắc nhở bạn
Chúc vui với bài tập này. Muốn xem Macro, nhấn Alt+F11
Thân
Em cảm ơn bác ạ, file bác làm rất hay và nhập rất nhanh ạ. Có thể vừa nhập vừa quan sát được cả danh sách. Xin bác giúp em cách để gọi bảng nhập, vì em phải đổi từ sheet này sang sheet khác nó mới lên bảng nhập, Và font chữ của bảng nhập, bác bỏ dấu và viết gọn lại giúp em ạ.
Ngoài ra bác chỉnh giúp em sau khi từ đơn giá enter 1 cái là tự nhập luôn đồng thời tự động xóa và trở lại ô tên sản phẩm để nhập ạ. cửa sổ đã nhập xong nếu là 1 phép check thì bác set giúp em tự tắt sau 0,5s, còn không thì tắt hẳn. mặc định khi mở thẻ nhập tất cả các ô đều trắng hết.
Em cảm ơn bác ạ, file bác làm rất hay và nhập rất nhanh ạ. Có thể vừa nhập vừa quan sát được cả danh sách.
Xin bác giúp em
(1) cách để gọi bảng nhập, vì em phải đổi từ sheet này sang sheet khác nó mới lên bảng nhập,
(2) & font chữ của bảng nhập, bác bỏ dấu và viết gọn lại giúp em ạ.
(3) Ngoài ra bác chỉnh giúp em sau khi từ đơn giá enter 1 cái là tự nhập luôn đồng thời tự động xóa và trở lại ô tên sản phẩm để nhập ạ.
(4) cửa sổ đã nhập xong nếu là 1 phép check thì bác set giúp em tự tắt sau 0,5s, còn không thì tắt hẳn.
(5) mặc định khi mở thẻ nhập tất cả các ô đều trắng hết.
(1) Hiện tại khi kích động trang tính Form2 thì Form xuất hiện
Nếu muốn hiện lúc nào cũng được thì:
Tạo 1 macro để mở Form để ở module1
Tạo cho macro này 1 tổ hợp phím để mơ nó, ví dụ như {CTRL}+{SHIFT}+O
Khí í ở trang tính nào bạn muốn mở Form cũng đặng!
(2) Chưa rõ iêu cầu lắm
(3) Chuyện trở lại TextBox 'Tên' sau khi nhập là lệnh Set Forcus, bạn thử hay tìm trên GPE
(4) Chuyện này bạn tự tìm hiểu & thực hiện đi, mình không có chuyên lắm!
(5) Không nên; Ngược lại cần thêm câu lệnh để kiểm tra TextBox 'Tên' có khác "GPE.COM" hay không mà thôi.