Quản lý đơn đặt hàng

  • Thread starter ntb_802
  • Ngày gửi
N

ntb_802

Thành viên sơ cấp
15/11/04
39
1
0
42
Ha Noi
#1
Mình có một file Excel - Quản lý đơn hàng.
Công việc của mình hàng ngày là đánh đơn hàng (theo mẫu sẵn đã thiết kế có trong excel) tên hàng số lượng, đơn giá... và người mua hàng, số đơn hàng... là những cái mình phải đánh vào. Cứ sau một đơn hàng mình lại copy toàn bộ đơn hàng đó rồi dán vào một sheet tổng hợp để theo dõi (bằng cách: chọn edit-> paste special... và chọn value ->0k).
Như vậy sẽ lưu toàn bộ lại đơn hàng đó ở dạng value, nếu có đơn hàng mới cũng làm như trước và di chuyển đến dòng cuối cùng của sheet tổng hợp và dán vào đó. Cứ như thế Cuối tháng mình sẽ có một đống đơn hàng trong máy và theo dõi rất tiện.
Vấn đề mình hỏi các bạn giúp mình là:
- Làm thế nào để excel tự động copy đơn hàng sang sheet tổng hợp ở dòng trống cuối cùng và ở dạng value? khi mình chỉ việc nhấn một nút.
Mình làm thủ công thế kia vẫn được nhưng khi có nhiều đơn hàng thì mất thời gian lắm. Các bạn giúp mình với nhé.
:atom:
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#2
Nếu bạn biết 1 chút Visual Basic thì những công việc trên rất đơn giản.
Sao bạn không Upload cái form nhập liệu đơn hàng cùng với cái form sheet tổng hợp lên đây!
 
W

WhoamI

Thành viên thân thiết
#3
ntb_802 nói:
- Làm thế nào để excel tự động copy đơn hàng sang sheet tổng hợp ở dòng trống cuối cùng và ở dạng value? khi mình chỉ việc nhấn một nút.
Mình làm thủ công thế kia vẫn được nhưng khi có nhiều đơn hàng thì mất thời gian lắm. Các bạn giúp mình với nhé.
:atom:
Hic hi, không làm xuôi được thì thử làm ngược cái xem sao bạn! Không chuyển được từ Form sang Table thì chuyển từ Table sang Form vậy (nếu ngại động chạm tới VBA - nếu chưa biết gì ...như tớ hihi) và cũng một công nhập liệu.

Bạn nhập liệu trực tiếp trên sheet tổng hợp có đánh số đơn hàng. Tạo một Sheet Đơn đặt hàng dùng kết hợp các hàm Vlookup, Index, match, Offset từ đơn giản đến phức tạp ...để lấy dữ liệu của đơn đặt hàng vừa cập nhật ở Sheet tổng hợp.
Cách thức giống như kiểu in phiếu thu, chi, nhập, xuất, thẻ kho trong file của Thanhnhan53 bạn có thể vào Thư viện WKT để down về nghiên cứu.
Nói chung file của Bác Thanhnhan53 thuộc file kinh điển cho kiểu chuyển từ table sang form. :biggrin:
 
N

ntb_802

Thành viên sơ cấp
15/11/04
39
1
0
42
Ha Noi
#4
Giúp mình với các bạn ơi!

Cám ơn các bạn đã quan tâm, mình không được quyền upload file nên mình đã gửi file cho handung107@yahoo.com nhờ bạn upload hoặc giúp mình nhé.
Thực ra công việc của mình chỉ có thế nên không cần dùng đến phần mềm kế toán (công ty mình cũng có PMKĐ), mà có dùng thì cũng không thể ảp dụng vào đây được, hàng hoá ra vào hàng ngày gạch xoá bất cứ lúc nào nên buộc phải dùng Excel, file mình gửi chỉ là một phần nhỏ thực hiện một công đoạn nhỏ của cả một quá trình thôi. Mình cũng thích Excel lắm (chỉ sau bạn gái và Internet thôi) nhưng áp dụng VBA thì chưa được, chỉ biết vài con macro cài lệnh in, chèn số đơn hàng tự động, và vài cái lặt vặt nữa.
Các bạn giúp mình nhé. Chúc các bạn một ngày vui vẻ!!!!

ntb_802@yahoo.com
:atom: :atom:
 
N

NgânGiang

Cố lên! Cố lên...
10/5/05
202
0
0
16
Trong Mây mù
www.baominh.com.vn
#5
handung107 nói:
File của bạn ntb 802, các bạn chuyên gia VBA giúp bạn ấy nhé
Xin lỗi chị handung107, Em không phải là chuyên gia VBA nhưng em cũng xin được làm một trong người nhận thử thách này.
Xin nói thêm: ở chỗ em đã áp dụng phần mềm kế toán nhưng vẫn thường Export dữ liệu ra dạng text hay table để xử lý phục vụ những báo cáo đột xuất và một số công tác phân tích, quản trị nội bộ...
Mỗi người 1 ý tưởng và có cách làm khác nhau, mong có nhiều bạn cùng tham gia và chúng ta cùng học hỏi lẫn nhau.
 
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#6
Macro!

Bạn vào Tool=>Macro=>New & nhập tên cho Macro thân yêu của mình VD: NhapLieu; Xong rồi thu ~ động tác sau đây:
1 Chọn 1 ô bất kỳ trên bảng nhập liệu;
2 Thực hiện động tác Copy;
3. Chon Sheet làm CSDL của bạn;
4. Chọn 1 ô bật kỳ & dán vào;
Kết thúc MAcro!
Khi Thực hiện Tool=>Macro=>edit NhapLieu bạn khai thêm một số biến Variant
thêm vào chương trình nhaplieu trên sao cho nó chọn tất thẩy các ô nhập liệu (giống như nó đã viết) gán các ActivecellValue vào các biến đã khai báo;
Sang Sheet CSDL bạn set các biến đã ghi vào các ô của dòng cuối là xong. Còn muốn tìm dòng cuối của 01 cột thì dùng vòng lặp Do ... Loop cho đến khi
ActivecellValue=""/ Len(activecell.value)<1 ... để nó thoát đúng dòng cần nhập là được.
Có gì không rõ cho biết nha! :banana: :dzo:
 
N

NgânGiang

Cố lên! Cố lên...
10/5/05
202
0
0
16
Trong Mây mù
www.baominh.com.vn
#7
ntb_802 nói:
Mình có một file Excel - Quản lý đơn hàng.
Công việc của mình hàng ngày là đánh đơn hàng (theo mẫu sẵn đã thiết kế có trong excel) tên hàng số lượng, đơn giá... và người mua hàng, số đơn hàng... là những cái mình phải đánh vào. Cứ sau một đơn hàng mình lại copy toàn bộ đơn hàng đó rồi dán vào một sheet tổng hợp để theo dõi (bằng cách: chọn edit-> paste special... và chọn value ->0k).
Như vậy sẽ lưu toàn bộ lại đơn hàng đó ở dạng value, nếu có đơn hàng mới cũng làm như trước và di chuyển đến dòng cuối cùng của sheet tổng hợp và dán vào đó. Cứ như thế Cuối tháng mình sẽ có một đống đơn hàng trong máy và theo dõi rất tiện.
Trước khi đưa ra giải pháp của mình, bạn hãy tạo 1 customer toolbar có nút lệnh paste value, như thế bạn sẽ bớt được ít nhất là 3 bước: Nhấn vào Edit, chọn Paste Special..., chọn Value.
Tương tự như thế, bạn tạo thêm một số nút lệnh khác nữa trên customer toolbar của mình. (Hiện tại mình có 1 số nút lệnh trong file đính kèm, bạn sẽ thấy nút Paste Value sáng lên khi Clipboard không rỗng)
 
Sửa lần cuối:
N

ntb_802

Thành viên sơ cấp
15/11/04
39
1
0
42
Ha Noi
#8
Giúp mình với các bạn ơi!

Cám ơn các bạn đã quan tâm, thực ra mình đã thiết kế một con macro nó tự động được hầu hết các yêu cầu, chỉ duy nhất là chưa lắp được đoạn mã làm sao nó chạy được đúng đến dòng trống đầu tiên ở cột A thì paste value vào đó, Cám ơn bạn Ngân Giang nhiều nhé, nếu bạn ở Hà Nội thì hôm nào mình mời bạn đi ăn kem nhé...
:atom: :atom: :atom:
Pass của file của mình là bbb112 Cám ơn các bạn đã quan tâm
 
Sửa lần cuối:
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#9
ntb_802 nói:
Cám ơn các bạn đã quan tâm, thực ra mình đã thiết kế một con macro nó tự động được hầu hết các yêu cầu, chỉ duy nhất là chưa lắp được đoạn mã làm sao nó chạy được đúng đến dòng trống đầu tiên ở cột A thì paste value vào đó, Cám ơn bạn Ngân Giang nhiều nhé, nếu bạn ở Hà Nội thì hôm nào mình mời bạn đi ăn kem nhé...
:atom: :atom: :atom:
Pass của file của mình là bbb112 Cám ơn các bạn đã quan tâm
Nếu bạn muốn đến dòng trống đầu tiên thì ngừng lại thì bạn thử cách của bác SA_DQ đi. Bác ấy hơi tóm tắt, nhưng chính xác hoàn toàn đấy. Tôi thử cách này thấy OK lắm.
 
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#10
Kiểu Dữ Liệu Của Trường Đầu Đó Là Gì?

Đễ tìm hàng trống cuối của cột A thì cần biết trong cột chứa kiểu dữ liệu gì đễ thoát vòng lặp cho đúng; :0frown: phần mình viết bữa trước ứng với chuỗi, nếu là trường chứa ngày tháng thì dùng hàm IsDate()=> false là được;
Đối với CSDL rất nhiều Record thì chuyển từng bước là không hay; nên dùng 3 vòng lặp. Vòng 1 lặp với Step = 100; vòng 2 - Step -10 (âm 10) & vòng 3 bình thường; Như vậy bạn sẽ thấy khi có 998 record nó chỉ làm có 10+10+10 lần là tìm ra dòng trống cuối CSDL mà thôi!
Cũng đúng nếu dữ liệu cả năm ta thêm vào Step Giá trị biến Thang =Month(date()) (Thang là biến Integer khai báo từ đầu chương trình). :two:
Chúc vui vẽ nha! :atom:
Nếu theo OVerAC:
"Nếu sử dụng biến đếm như vậy thì cũng lâu!
Em có cách này hay hơn nhưng chưa áp dụng bao giờ! Tất nhiên là theo em thì sử dụng được là dùng hàm: worksheetfunction.Count(range(....)) "

Mong bạn OVerSC thử dùng phương thức Goto Blank trong menu Edit xem thử được không?
 
Sửa lần cuối:
B

Bình_OverAC

Over Abnormal / Crazy
14/5/04
845
7
18
37
Nha Trang
#11
Nếu sử dụng biến đếm như vậy thì cũng lâu!
Em có cách này hay hơn nhưng chưa áp dụng bao giờ! Tất nhiên là theo em thì sử dụng được là dùng hàm: worksheetfunction.Count(range(....))
Nhưng buột vùng đếm phải là một trường số.
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#12
Tớ thấy một vài người hỏi cái này, tớ dùng đơn giản lắm, lệnh End() tương tự như nhấn giữ phím Ctrol + phím mủi tên di chuyển.

Bạn thử đoạn mã sau:

Range("A3").Select ' Chọn ô A3
Selection.End(xlDown).Select 'Di chuyển trên cột A đến ô cuối có data
Selection.Offset(1, 0).Select ' Chọn ô tiếp theo

Hoặc
Range("A65536").Select ' Chọn ô cuối sheet
Selection.End(xlUp).Select 'Di chuyển lên.
Selection.Offset(1, 0).Select

Mà bạn up cái file lên còn cài password, làm sao mà mở vì đâu có software track password đâu trời!
 
Sửa lần cuối:
N

ntb_802

Thành viên sơ cấp
15/11/04
39
1
0
42
Ha Noi
#13
Cám ơn bạn A-Tran, mình thử cách của bạn thì nó chạy được đến đúng dòng cuối cùng của sheet thì bị mắc ở đấy (A655536) và đương nhiên báo lỗi vì cú như máy mình chạy đến đoạn : Selection.End(xlDown).Select thì là chạy tít đến tận cuối luôn. bạn xem lại thế nào nhé
Password của file upload là bbb112 mà.

:atom: :atom: :atom: :atom:
 
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#14
ntb_802 nói:
Cám ơn bạn A-Tran, mình thử cách của bạn thì nó chạy được đến đúng dòng cuối cùng của sheet thì bị mắc ở đấy (A655536) và đương nhiên báo lỗi vì cú như máy mình chạy đến đoạn : Selection.End(xlDown).Select thì là chạy tít đến tận cuối luôn. bạn xem lại thế nào nhé
Password của file upload là bbb112 mà.

:atom: :atom: :atom: :atom:
File của bạn Bình khá rắc rối mà tôi lại không có font để đọc. Theo tôi hiểu thì bạn muốn vào sheet "Tonghop" và đến dòng trông cuối cùng. Bạn làm thế này nhé.

sheets("Tonghop").select
range("A9").select
do while cells(i,1)<>""
i=i+1
loop

(hì hì chưa thử, nhưng mà logic sẽ là như vậy). Nếu bạn muốn nhanh hơn thì dùng 3 vòng lặp như cách của SA_DQ, nhưng tôi thấy trong sheet của bạn có vài hàng lèo tèo thôi, làm cách nông dân như trên chắc cũng chấp nhận được, nhất là máy móc dạo này chạy nhanh hơn thỏ.
 
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#15
Nữa Đây!

Muốn chạy nhanh để tìm đến dòng trống cuối phải không? :wall: , phải tốn một chút nha: Tạo thêm một cột TT (VD cột A) trong sheets CSDL; còn Sheets Nhap lieu nhập chuỗi sau vào ô nào đó (VD C9): =Max("CSDL!A:A")+1 :atom:
khi chạy Macro sẽ phải lấy luôn giá trị ở ô C9 nêu trên gán vào 1 biến ii đã khai báo & qua CSDL chạy đến dòng có giá trị ii+1; OK ngay. Nhưng nhớ gán giá trị dòng cuối cột A giá trị ii+1 thích hợp để còn sử dụng lần nhập liệu sau! :two:
 
Sửa lần cuối:
W

workman

Thành viên sơ cấp
22/7/05
372
0
0
46
Ho Chi Minh
#16
SA_DQ nói:
Muốn chạy nhanh để tìm đến dòng trống cuối phải không? :wall: , phải tốn một chút nha: Tạo thêm một cột TT (VD cột A) trong sheets CSDL; còn Sheets Nhap lieu nhập chuỗi sau vào ô nào đó (VD C9): =Max("CSDL!A:A")+1 :atom:
khi chạy Macro sẽ phải lấy luôn giá trị ở ô C9 nêu trên gán vào 1 biến ii đã khai báo & qua CSDL chạy đến dòng có giá trị ii+1; OK ngay. Nhưng nhớ gán giá trị dòng cuối cột A giá trị ii+1 thích hợp để còn sử dụng lần nhập liệu sau! :two:
Hay lắm. Cách này rất thông minh. Cám ơn SADQ

Bạn Thanh Bình nhớ phải cấu trúc cột A sao cho theo số thứ tự nhé. Tức là nếu cột A của bạn có cấu trúc tốt thì theo cách của SA_DQ, còn nếu không theo thứ tự thì thử cách thủ công của tôi vậy.
 
N

ntb_802

Thành viên sơ cấp
15/11/04
39
1
0
42
Ha Noi
#17
Cuối cùng tổng kết lại các phương pháp các bạn giúp đỡ, file của mình cũng chẳng chạy được, VBA của mình quá kém, khi báo lỗi thì chẳng biết đâu mà lần, bạn nào giỏi VBA viết hộ mình đoạn mã trên đi. Các bạn coi như mình không biết gì về VBA nhé, mà quả thật thì cũng đúng như vậy.
:atom: :atom: :atom:
 
S

SA_DQ

Thành viên thân thiết
29/6/05
435
38
28
61
HCM city
#18
Sao Vậy?!

Tôi đọc lại bài ngày 28 của bạn & thấy rằng Bạn chỉ còn vấn đề chép thôi? (Hình như bạn muốn chép Special?). Vậy thì theo KN của mình ở Sheet nhập liệu bạn sẽ phải nhập theo cột VD: [Ngay],[MaKH],[SoCTu],[SoLuong],[DGia], [TTien].... & Ở Sheet CSDL Các cột cũng có thứ tự như vậy mới chép được đúng; Còn cách tìm dòng cuối mình nói quá đủ rồi mà; Muốn viết giùm thì phải nêu thứ tự các trường nhập liệu của bạn lên; Mình sẵn lòng giúp sau vài ngày đi công tác về, nha?! :dzo: :atom: :banana: :two:
 
adam_tran

adam_tran

Steel Partner
17/5/05
1,373
32
48
41
Goooogle
#19
handung107 nói:
File của bạn ntb 802, các bạn chuyên gia VBA giúp bạn ấy nhé
oài, file này bị virus XF.Sic.gen, Poppy! Bạn Nô Bi ta ơi coi chừng đấy.
Nếu ở sheet nhập liệu bạn tạo form như phiếu thu-chi chẳng hạn, bạn tạo 1 vùng đệm (dấu đi) hoặc 1 sheet khác có cấu trúc như sheet T.Hop-HD, 1 dòng công thức link số liệu đến form. Tạo 1 con macro copy cái vùng đệm này.

Di chuyển tới dòng cuối:
sheets("T.Hop-HD").select
Range("H60000").select
selection.end(xlUp).select
selection.offset(1, -8).select 'xuống 1 dòng và lùi sang trái 8 cột.
activesheet paste
Nó sẽ dán dữ liệu copy vào bắt đầu từ cột A, dòng cuối cùng có chứa dữ liệu căn cứ vào cột H.
 
Sửa lần cuối:
N

ntb_802

Thành viên sơ cấp
15/11/04
39
1
0
42
Ha Noi
#20
Cuối cùng đã ô kê cám ơn các bạn nhé, mình lắp đoạn mã của bạn Trần A Đam, và chạy. Truuuuuuuuu`i Không tin vào mắt mình nữa quá tuyệt vời, lần sau mình chỉ cần nhấn một nút sau đó ngồi đánh cờ, fê wá, có lẽ đợt tới phải đi học lớp VBA thôi, các bạn biết ở đâu dạy không? bảo mình với nhé!


:atom: :atom: :atom:
 

Thành viên trực tuyến

  • Nguyễn Thị Thúy Loan
  • K.HOA
  • Châu.pt
  • khanhhoang34
  • daongocnam0603
  • vu thi thuy hong

Xem nhiều