ký hiệu @,#,$,0 trong VBA là gì??? (1 người xem)

  • Thread starter Thread starter DMQ
  • Ngày gửi Ngày gửi
Liên hệ QC

Người dùng đang xem chủ đề này

DMQ

Thành viên dốt
Tham gia
21/3/12
Bài viết
722
Được thích
57
Giới tính
Nam
Em có một đoạn code của một AC viết dùm như sau
Mã:
    dic.exists(danhmuc(k, 1)) Then dic.Add danhmuc(k, 1), danhmuc(k, 1) & "@#$"   & danhmuc(k, 4) & "@#$0@#$0"
Xin các AC giải nghĩa dùm em ý nghĩa của các ký hiệu đặc biệt trên????
 
Lần chỉnh sửa cuối:
Em có một đoạn code của một AC viết dùm như sau
Mã:
        If Not dic.exists(danhmuc(k, 1)) Then dic.Add danhmuc(k, 1), danhmuc(k, 1) & "@#$" & danhmuc(k, 2) & "@#$" & danhmuc(k, 3) & "@#$" & danhmuc(k, 4) & "@#$0@#$0"
Xin các AC giải nghĩa dùm em ý nghĩa của các ký hiệu đặc biệt trên????

Người viết muốn "chắc cú" là chuỗi ký tự khi ghép lại không thể bị trùng khi có những tình huống xảy ra:
Ví dụ:
Ghép 100, 12, 25 thành 1001225
Ghép 1001, 2, 25 cũng thành 1001225
Chỉ cần 100 # 12 # 25 sẽ khác với 1001 # 2 # 25
# hay thêm 1 đống ký tự ít khi dùng trong chuỗi cho "chắc cú".
--------------
Đoạn code trên cũng chẳng biết người viết muốn gì.
Thường người ta muốn add Key vào Dic không bị "hồ đồ", nhưng trường hợp này lại là Item
 
Lần chỉnh sửa cuối:
Upvote 0
Thường người ta muốn add Key vào Dic không bị "hồ đồ", nhưng trường hợp này lại là Item
Add vào key muốn hồ đồ cũng không được vì đặc điểm của Dic. Add vào item để khi sử dụng item sẽ tách ra lại thành 3 giá trị như ban đầu.
Có 1 cách khác là add item là 1 mảng 1 chiều. Dù là nối chuỗi sau đó tách ra hay dùng item mảng cũng sẽ chậm hơn 1 chút so với dùng 1 mảng 2 chiều phụ.
 
Upvote 0
Tình hình là thế này. Một nhân viên kho có:
1. danh mục hàng trong kho vào thời điểm 31-12 của năm trước gồm 4 cột: Mã, Tên hàng, Đơn vị tính, Tồn ở 31-12. Danh mục sẽ kéo dài thêm khi nhập mặt hàng mới trong năm. Tất nhiên hàng mới sẽ có cột Tồn (31-12 năm trước) là 0.
2. Vùng dữ liệu nhập của năm hiện hành vd. bây giờ là tháng 2 thì dữ liệu đang tới tháng 2 trong đó có: Ngày nhập, Mã, Tên hàng, Số lượng nhập ...
3. Vùng dữ liệu Xuất trong năm hiện hành (vd. bây giờ là tháng 2 thì dữ liệu đang tới tháng 2) trong đó có: Ngày Xuất, Mã, Tên hàng, Số lượng xuất ...

Nhân viên muốn có MultiPage trong đó 1 Page là: Khi chọn Page thì nhập vào combobox chỉ số của các tháng có nhập hoặc xuất trong năm. Vd. ở thời điểm tháng 4 thì trong combobox có: 1, 2, 3, 4. Nhân viên muốn khi chọn tháng nào đó thì: với mỗi Mã - Tên hàng (cả 2 đều unique) trong danh mục thì nhập vào Listbox: Số thứ tự (danh sách có 70 mặt hàng thì Listbox có 70 dòng STT = 1, 2, ..., 70), Mã, Tên hàng, Tồn đầu (trước tháng được chọn), Nhập trong tháng, Xuất trong tháng. Vd. nhân viên chọn tháng 3 trong combobox thì: dòng n (n = 1, 2, ..., 70) có: STT = n, Mã n, Tên hàng n, Tồn đầu (tồn trước 01-03) của Mã n = Tồn đầu của Mã n ở 31-12 năm trước + các lần nhập trong năm có ngày < 01-03, Nhập trong tháng 3 = tổng các lần nhập trong tháng 3 của Mã n, Xuất trong tháng 3 = tổng các lần xuất trong tháng 3 của Mã n.

Để làm việc trên thì có người giúp nhân viên viết code với "thuật toán" cho combobox_Change như sau:
1. Duyệt từng Mã (cột 1) trong danh mục và nếu chưa có trong dic thì thêm vào. Ở trên nói Mã trong DM là unique (có code kiểm tra khi thêm hàng mới ở Page "Hàng mới") nhưng ngoài việc thêm hàng mới vào DM bằng code thì hoàn toàn có thể "tắt" code và thêm vào bằng tay nên người giúp đề phòng và sử dụng If Not dic.exists.
Khi thêm vào dic thì thêm Mã với tư cách là Key (Mã unique) và với tư cách Item
Mã:
danhmuc(k, 1) & "@#$" & danhmuc(k, 2) & "@#$" & danhmuc(k, 3) & "@#$" & danhmuc(k, 4) & "@#$0@#$0"
Trong đó 4 cột của danh mục là Mã, Tên hàng, Đơn vị tính, Tồn 31-12 năm trước. 2 thành phần cuối là Nhập (trong tháng hiện hành) và Xuất (trong tháng hiện hành)
Người giúp lúc đầu dùng ký tự phân cách là "-". Sau khi chạy code thì thấy lỗi, kiểm tra lại thì thấy một số Tên hàng có ký tự "-", và cả ".", "/". Để đề phòng những tên hàng mới hoặc Mã có những ký tự không lường trước được nên người giúp dùng cụm ký tự
Mã:
"@#$"
để cho chắc chắn, cố tình phòng xa thôi
Ở thời điểm này thì Tồn trước tháng hiện hành chính là Tồn ở 31-12, Nhập = Xuất = 0 (2 thành phần cuối)
2. Tiếp theo người giúp duyệt từng dòng của vùng nhập. Đọc Mã -> đọc Item của Mã:
Mã:
item = Split(Mã, "@#$")
-> đọc ngày và nếu có tháng < tháng được chọn thì số lượng ở cột Nhập sẽ cộng vào item(3) để làm Tồn đầu (tồn trước tháng được chọn) còn nếu có tháng = tháng được chọn thì cộng vào item(4) để làm Nhập (trong tháng được chọn) -> làm mới Item của dic:
Mã:
dic.item(Mã) = Join(item, "@#$")
3. Tiếp theo người giúp duyệt từng dòng của vùng xuất. Đọc Mã -> đọc Item của Mã:
Mã:
item = Split(Mã, "@#$")
-> đọc ngày và nếu có tháng < tháng được chọn thì số lượng ở cột Xuất sẽ được trừ đi từ item(3) để làm Tồn đầu (tồn trước tháng được chọn) còn nếu có tháng = tháng được chọn thì cộng vào item(5) để làm Xuất (trong tháng được chọn) -> làm mới Item của dic:
Mã:
dic.item(Mã) = Join(item, "@#$")
4. Bây giờ xét mảng Arr = dic.Items. Duyệt từng mục của Arr:
Mã:
item = Split(Arr(k), "@#$")
-> item(0), item(1), item(2), item(3), item(4), item(5), item(6) chính là Mã, Tên hàng, Đơn vị tính, Tồn trước tháng, Nhập trong tháng và Xuất trong tháng để thêm vào ListBox.
---------------
DMQ tức quykh:
Nếu bạn muốn hỏi trên GPE thì cứ tự nhiên. Nhưng nếu thế bạn hỏi "tại sao" bằng tin nhắn cho tôi để làm gì? Tôi mất thời gian trả lời mà chắc gì bạn đã tin. Người giúp viết code có thể không hiểu tại sao mình lại làm thế? Mà đã hỏi thì trích toàn bộ code. Làm 1 dòng như thế người ta không hiểu thì người ta lại thắc mắc tại sao không ADD "cả cụm" vào Key mà lại ADD vào Item.
Tôi giúp bạn từ A-Z, toàn bộ code cho 7 Page (phiếu nhập, phiếu xuất, tìm phiếu nhập, tìm phiếu xuất, báo cáo chi tiết, báo cáo tháng, hàng hóa mới). Rồi lại cả giải thích cho bạn hiểu code. Bản thân bạn đã từng nhắn tin hỏi nhiều người nhưng bạn đã thấy và "tự thú" trên GPE là chỉ 1 Page thôi mà đã không ai "có thời gian" để giúp bạn.

Bây giờ đọc lại chủ đề trước thì thấy tôi cũng đã làm cho bạn DMQ tức quykh từ A-Z nhưng đồng thời bạn cũng hỏi trên GPE. Không tin tôi sao?

Tôi sẽ không giúp bạn nữa.
 
Lần chỉnh sửa cuối:
Upvote 0
Code người nào viết thì hỏi người ấy. Nhất là trường hợp đặc thù cho vấn đề của cá nhân.
Bạn chỉ nên hỏi trên công cộng khi tác giả code không chịu trả lời.

Vả lại, đưa lên chỉ một dòng code không đủ để hiểu gì cả. Cũng như bạn trích đầu trang sách có câu "đoàn kết chặt chẽ sẽ dẫn đến sự suy yếu của tổ chức...". Người nghe sẽ có cảm tưởng sách này chống đoàn kết. Trong khi thực ra nếu lật trang trước sách sẽ thấy dòng cuối có đoạn "Không có tinh thần...". Đem trích nguyên câu thì là "Không có tinh thần đoàn kết chặt chẽ sẽ dẫn đến sự suy yếu của tổ chức..."
 
Upvote 0

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

Back
Top Bottom