Đánh giá chủ đề:
  • 1 Votes - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Xây dựng các chuổi tham chiếu lồng ghép có dấu ngoặc kép
#1
Mấy ngày gần đây, có một số bạn gặp khó khăn khi khi xây dựng những hàm lồng ghép bị lỗi tham chiếu. Sẵn đây mình sẽ phân tích một số trường hợp đã trải nghiệm. Chắc chắn sẽ có thiếu, nhờ các cao thủ bổ sung thêm, để hỗ trợ cho một số bạn chưa vững trong vấn đề này.
Một số trường hợp ở hàm Iif, hàm Dlookup sẽ gặp một đẳng thức so sánh. Ví dụ:
Học sinh là Hoàng, Điểm toán lớn hơn 8
-Học sinh là Hoàng: biểu thức đúng phải là [Hocsinh]="Hoàng". Tên trường buột phải đặt giữa cặp [], nếu "Hocsinh" VBA sẽ hiểu là một giá trị text"Hocsinh", nếu chỉ là Hocsinh thì VBA nghĩ đây là một biến Hocsinh còn "[Hocsinh]" thì VBA bó tay luôn. Còn Hoàng là một giá trị text nên phải xử lý là "Hoàng", không thể là [Hoàng] (trường tên là Hoàng) hay Hoàng (biến tên là Hoàng).
-Điểm toán lớn hơn 8: biểu thức đúng phải là [TOAN]>8. VBA bắt buộc tên biến phải có ký tự không phải là số, nên giá trị dữ liệu kiểu số không được đưa giữa cặp "" hoặc ''. Vì vậy khi xử lý [TOAN]>'8', VBA sẽ hiểu là trường TOAN lớn hơn ký tự 8 chứ không phải trường TOAN lớn hơn giá trị 8 và báo lỗi.
Một trường hợp khác: ví dụ ngày hóa đơn là 20 tháng 7 năm 2015. Biểu thức đúng phải là [NGAYHOADON]=#7/20/2015#. Nếu thể hiện là [NGAYHOADON]=7/20/2015, VBA sẽ nghĩ rằng [NGAYHOADON] bằng 7 chia 20 chia 15. Trong query có thể [NGAYHOADON]=#20/7/2015# nếu thiêt đặt region là dd/mm/yyyy, nhưng trong module nếu gặp trường hợp này VBA sẽ hiểu ngày hóa đơn là 7 tháng 20 năm 2015 và sẽ báo lỗi.
Thiết lập chuổi tìm kiến trong VBA:
Nếu biểu thức có gía trị tìm kiếm là số. Ví dụ Một biến số tên intSOLUONG có giá trị 25 nằm trên trường SOLUONG -->"[SOLUONG = 25]" hoặc "[SOLUONG = ]" & intSOLUONG 
Nếu biểu thức có gía trị tìm kiếm là ngày tháng. Ví dụ Một biến số tên datNGAYSINH là ngày sinh 25 tháng 3 năm 2005 nằm trên trường NGAYSINH --> "[NGAYSINH] = #25/3/2015#]" hoặc "[NGAYSINH = # "& datNGAYSINH &" #]"
Trường hợp với Học sinh là Hoàng ở trên khi đưa biểu thức vào VBA nó sẽ là "[Hocsinh]="Hoàng" ". Nhưng có một nguyên tắc là một biểu thức được phân cách bằng " " sẽ không chứa các dấu " " vì vậy điều này không thể được. Nhưng xử lý thế này thì VBA chấp nhận "[Hocsinh]='Hoàng' ". Nếu thay thế Hoàng bằng một biến strHocsinh thì không thể dùng "[Hocsinh]="strHocsinh" " được mà phải dùng  "[Hocsinh]=' " & strHocsinh & " ' ". Nhiều trường hợp lồng ghép chuổi phức tạp quá. Tôi đã thử xử lý thay thế " = Chr$(34) Ví dụ: "[Hocsinh]=" & Chr$(34) & strHocsinh & Chr$(34). Vậy mà VBA cũng OK.
Thực ra tôi cũng không hiểu chủ đề của tôi hỗ trợ cho các bạn được bao nhiêu. Nhưng xin phép dừng lại đây. Để các cao thủ khác xử lý tiếp. Chứ nếu tôi viết tiếp thì ngay cả tôi cũng bị tẩu hỏa nhập ma mất.
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan , Noname , chigonvh , Minh Tiên
#2
Góp thêm 1 ý không lan can. Đó là, hạn chế đến mức thấp nhất dùng hàm Format để định dạng ngày tháng.

Ví dụ: tôi có kiểu text 01/02/2015 (ngày 01 tháng 02 năm 2015) muốn chuyển sáng dd/mm/yyyy

Tôi dùng: Format("01/02/2015",#dd/mm/yyyy#) => 02/01/2015

Khi dùng month để kiểm tra thì ra tháng 01. Thật bực mình, và ngày đó viết 1 đoạn hàm để xử lý cũng gần 10 dòng mới ổn. Thế rồi vài tháng sau, mình nhận ra là. Thôi hàm format để định dạng ngày tháng ít dùng thì hơn. Bởi hay nhảy tầm bậy. Đó chỉ là 1 ví dụ nhỏ của mình thôi.

Riêng về các kiểu để trong dấu như thế nào anh Ân đã chỉ các bạn phía trên rồi, tôi thì nhớ tóm tắt thế này.
- Kiểu text: cho vào dấu:      '      '
- Kiểu number: thả rông
- Kiểu date: dấu           #        #
- Tên cột/Textbox: cho vào dấu      [        ]


Riêng trên VBA thì ..........cũng na na, có những điểm khác như anh TranThanhAn trình bày trên. Nói chung khi làm phải test đến khi nào ok thì đó là kết quả cuối cùng. Chứ hàm, lệnh ...các ký hiệu có trời mới nhớ hết. Khi cần thì......lấy bí kíp ra xem.

Thân mến.
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname , tranthanhan1962 , chigonvh , Minh Tiên
#3
(31-07-15, 01:34 AM)maidinhdan Đã viết: ... Nói chung khi làm phải test đến khi nào ok thì đó là kết quả cuối cùng. Chứ hàm, lệnh ...các ký hiệu có trời mới nhớ hết. Khi cần thì......lấy bí kíp ra xem.

Thân mến.

007 Dân đã phát biểu câu nói hay nhất dành cho những người viết code. 
test, test và test!!!
Thank
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan
#4
em là Mai Đình Dân, anh Ân cứ nhầm hoài 040 . Tên của anh, thêm ký tự D phía trước.  005
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#5
Sorry. Anh sẽ sửa lại
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Sựa khác nhau giữa Module và Class Module, phạm vi áp dụng của từng loại. MinhnHang 6 299 29-11-16, 09:11 PM
Bài mới nhất: ongke0711
  [Thủ Thuật] Demo Hàm report tự canh đều chiều cao ( Không kẻ line)) maidinhdan 34 1,471 20-10-16, 11:01 AM
Bài mới nhất: maidinhdan
  Viết phần quyền sử dụng tt1212 9 491 01-10-16, 12:26 AM
Bài mới nhất: maidinhdan
  [Help] Gửi message đóng ứng dụng tới end user tvn_hut 11 671 30-08-16, 08:27 PM
Bài mới nhất: maidinhdan
  Sử dụng Class Module và Kết nối dữ liệu SQL SERVER trong Access VBA lehongduc 42 17,028 12-06-16, 12:28 PM
Bài mới nhất: lehongduc

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ