phananhvusv
Thành viên chính thức
- Tham gia
- 28/3/17
- Bài viết
- 72
- Được thích
- 13
Lỗi hàm Cdate hình như nó không chuyển đổi được thành dạng ngày tháng.Bạn tách nó thành tháng và năm rồi dùng hàm DateSerial rồi so sánh nhé.Em viết được đoạn code VBA như trong file đính kèm, nhưng chạy bị lỗi "Run-time error '16'. Expression too complex" mà không rõ nguyên nhân và cách khắc phục. Nhờ anh/chị trên diễn đàn xem giúp em với. em cám ơn ạ.
lạ thật, mình đưa vào mảng thì Cdate nó so sánh được ngay, còn lấy thẳng trên range thì báo lỗi.Lỗi hàm Cdate hình như nó không chuyển đổi được thành dạng ngày tháng.Bạn tách nó thành tháng và năm rồi dùng hàm DateSerial rồi so sánh nhé.
If CDate(arr2(i, 3)) >= CDate(dictuthang(arr2(i, 1))) And CDate(arr2(i, 4)) <= CDate(dicdenthang(arr2(i, 1))) Then
Làm gì có chuyện lấy thẳng trên range thì lỗi mà lấy từ trị của mảng lại được. Lỗi từ đâu đó trong code thôi.lạ thật, mình đưa vào mảng thì Cdate nó so sánh được ngay, còn lấy thẳng trên range thì báo lỗi.
Mã:If CDate(arr2(i, 3)) >= CDate(dictuthang(arr2(i, 1))) And CDate(arr2(i, 4)) <= CDate(dicdenthang(arr2(i, 1))) Then
Khi đổ dữ liệu từ range ra mảng, Excel đã tính kết quả các biểu thức.Làm gì có chuyện lấy thẳng trên range thì lỗi mà lấy từ trị của mảng lại được. Lỗi từ đâu đó trong code thôi.
Cám ơn anh, em học được một lý thuyết rất hay. Trước giờ thấy anh/chị trên diễn đàn dùng nhiều Dateserial mà ko hiểu tại sao không dùng Cdate. Vì em thấy Cdate gọn và tiện lợi hơn.Khi đổ dữ liệu từ range ra mảng, Excel đã tính kết quả các biểu thức.
Khi lấy trị của một cell, Excel dùng phương thức khác.
Các hàm C* là hàm nắn kiểu - C là Cast. :úc dùng cell, CDate nắn kiểu của đối tượng mà nó lấy trong cell ra thành date. Lúc dùng trên array thì array đã nắn trước kiểu dữ liệu thành số hoặc chuỗi rồi.