Xây dựng các chuổi tham chiếu lồng ghép có dấu ngoặc kép
tranthanhan1962 > 31-07-15, 12:53 AM
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.