Cách nhập dữ liệu trong Excel bằng form tự tạo

Liên hệ QC

thaibinh_excel

Thành viên hoạt động
Tham gia
18/10/07
Bài viết
127
Được thích
29
Nghề nghiệp
Bán Hàng
Các bạn giúp mình nhé,

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é.

Cảm ơn các bạn nhiều
 

File đính kèm

  • Sample.xls
    20 KB · Đọc: 8,096
Cho mình hỏi chút là trong bảng tính của mình muốn làm công thức ví dụ là ( cột A có các số 30%, 40%, 60% ) mình muốn lấy sang cột B( nếu cột A <= 30% thì nhân với 7000, <=40% thì nhân với 3000, còn cột A>30%, 40%,60% thì không nhân với các số; Vậy công thức nhập như thế nào. Mọi người giúp mình với. Xin Cám ơn
Bài 362 tôi có góp ý và đề nghị Bạn nên mở Topic mới để được nhiều người giúp nhưng bạn không đọc hay sao?
Tôi khuyên nên sử dụng VBA để có thể áp dụng in phiếu hàng loạt.
 
Upvote 0
Đúng ra file này về lâu về dài nên xài VBA & xài từ đầu; Đó là khâu thiết kế CSDL cho hợp lý
 
Upvote 0
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
 
Upvote 0
Nhờ mọi người giúp mình chút mình có file này nhưng làm chưa được toàn báo lỗi Run-time error '424' Chân thành cám ơn mọi người
 

File đính kèm

  • TIM KIEM VAT TU.xlsm
    613.9 KB · Đọc: 26
Upvote 0
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
 
Upvote 0
Bạn có thể sửa vào file giúp mình với được ko. Cám ơn
 
Upvote 0
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!"
 
Upvote 0
Nhờ mọi người giúp mình chút mình có file này nhưng làm chưa được toàn báo lỗi Run-time error '424' Chân thành cám ơn mọi người
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.

2. Không biết
Mã:
...
Cancel = False
để làm gì???
 
Lần chỉnh sửa cuối:
Upvote 0
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
 

File đính kèm

  • TIM KIEM VAT TU.xlsm
    615.8 KB · Đọc: 26
Upvote 0
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
Mã:
Cancel = True
...
để làm gì, mục đích???em cảm ơn!
 
Upvote 0
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!)
 
Upvote 0
Mã:
Cancel = True
...
để làm gì, mục đích???em cảm ơn!
Không hiểu ý bạn nên đoán mò.

Thì bạn đọc trợ giúp thôi. Nhiều người khác hơn bạn chẳng qua là người ta chịu khó đọc trợ giúp và tự kiểm nghiệm, tìm tòi. Thế thôi.

Thậm chí không đọc trợ giúp bạn vẫn có thể kiểm nghiệm, "mục sở thị".

Cancel chỉ có 2 khả năng. Bạn có bao giờ đúp chuột trên cell chưa? Nếu đã thì bạn sẽ thấy trỏ văn bản (dấu |) nhấp nháy trong cell. Bây giờ bạn chạy 2 code:
Mã:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
   
End Sub

hoặc
Mã:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'    ...
    Cancel = False
End Sub
Thì khi code thực hiện xong thì bạn thấy là trỏ văn bản nhấp nháy. Tức khi không có code cho sự kiện đúp chuột hoặc khi Cancel = False thì sau khi thực hiện code nếu có (trường hợp 2) thì cell ở chế độ EDIT. Cũng có thể đoán mò là Cancel = False là mặc định. Tức khi vào Sub thì Cancel = False.

Bây giờ chạy
Mã:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
'    ...
    Cancel = True
End Sub
Thì khi code thực hiện xong thì bạn không thấy trỏ văn bản nhấp nháy, cell không ở chế độ EDIT.

Code
Mã:
Cancel = True
'    ...
Cancel = False
về hậu quả thì y hệt như code
Mã:
'    ...
Cancel = False

Vậy thì thêm 2 Cancel để làm gì? Vì nếu muốn Cancel = False thì chỉ cần không nhập Cancel nào, vì False là mặc định. Thậm chí nếu không biết cái nào là mặc định mà muốn thiết lập False thì chỉ cần 1 Cancel = False thôi. Thiết lập ở trên Cancel = True (hãy đọc code của chủ thớt) để làm gì?

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.

Một khi muốn bắt chước những người khác, muốn dùng một đoạn code của người khác thì trước hết phải hiểu được code đó, từng dòng code đó làm gì. Vì nếu không hiểu thì làm sao có thể biến tấu, có thể thêm bớt, có thể áp dụng vào tập của mình được?
 
Lần chỉnh sửa cuối:
Upvote 0
(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
Hậu quả là không có thói quen có Option Explicit thôi. Vì thế mà không nhìn thấy, không được gợị ý là sai ở đâu - ở trên là sArray, ở dưới là sAray.

Mà không hiểu sao lại định làm 2 lần .List = ... để làm gì. Cho chắc ăn?
 
Upvote 0
Mình đang tập tành thôi vì chưa biết, chưa hiểu nên mới đưa lên mong mọi người giúp đở
 
Upvote 0
Lần cuối nè:
Bạn bỏ hết các dòng lệnh On Error Resume Next đi
& như bài #381 đã nêu: Luôn có Option Explicit
 
Upvote 0
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
 
Upvote 0
Em ghép thêm lệnh tự động nhập Form không cần nút lệnh luôn. Cái này sẽ tăng tốc cho quá trình nhập dữ liệu cho mọi người luôn. ha. .ha.. .
Cảm ơn bạn Boong, mình rất thích file này của bạn, nhưng một số nội dung của mình khác, nhờ bạn chỉnh lại giúp cho mình tại form1 và form2 nhé
 
Upvote 0
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
Cảm ơn bạn Xuân Thanh. Do mình có nhu cầu tương tự, xin nhờ bạn chỉnh giúp mình theo file dưới
 

File đính kèm

  • Nhaplieu.xls
    160.5 KB · Đọc: 9
Upvote 0

File đính kèm

  • NhapSach.xlsm
    43.1 KB · Đọc: 51
Upvote 0
Thử xài Form như 1 trãi nghiệm mới xem sao, bạ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.
 
Upvote 0
Web KT
Back
Top Bottom