Hỏi về lỗi chưa khai báo biến VBA (1 người xem)

Liên hệ QC

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

gia_daica

Thành viên mới
Tham gia
18/2/12
Bài viết
4
Được thích
0
Các bác cho em hỏi một vấn đề thế này.
Em có một đoạn code VBA, các biến em điều không khai báo (mặc định sẽ tự hiểu là biên variant).
Em chạy code trên ở một số máy
tính thì bình thường. Cũng code này em chạy trên máy của bạn em lại báo lỗi chưa khai báo biến.
Vậy các bác cho em hỏi máy của bạn em thiếu cài đặt gì vậy?
Xin cảm ơn!
 
Lần chỉnh sửa cuối:
Trong VBA options có 1 chỗ đặt mặc định. Nếu chỗ này mặc định là phải phai báo thì mọi code module đều phải khai báo biến.
 
Upvote 0
Trong VBA options có 1 chỗ đặt mặc định. Nếu chỗ này mặc định là phải phai báo thì mọi code module đều phải khai báo biến.
Em đã kiểm tra, khi mục "Require Variable Declaration" được chọn mà trên cùng code module không có dòng "Option Explicit" thì vẫn không phải khai báo biến.
Em đã thử trên máy tính khác cũng cho kết quả tương tự.
Mục "Require Variable Declaration" được chọn có tác dụng: Khi mở một code module mới (lần đầu tiên) thì tự động thêm dòng "Option Explicit".
(Excel 64bit).

Có ai khác với trường hợp của em không ạ?
 
Upvote 0
Có ai khác với trường hợp của em không ạ?
Câu trả lời là KHÔNG CÓ KHÁC
Tóm lại: VBA bắt lỗi thiếu khai báo biến là dựa vào dòng Option Explicit có được ghi ở đầu code hay không. Mục "Require Variable Declaration" có check hay không không quan trọng (check vào sẽ có tác dụng như bạn mô tả ở trên)
 
Upvote 0
Ờ, lầm rồi. Xin lỗi.
(Kỹ thuật dùng Compiler Directives của VBA hơi lỏng lẻo mà tôi không để ý)
 
Upvote 0
Nói chung trong code có sử dụng 1 biến nào đó thì bắt buộc phải khai báo biến nếu khai báo sai kiểu Type nó vẫn phát sinh lỗi như thường.
 
Upvote 0
Nói chung trong code có sử dụng 1 biến nào đó thì bắt buộc phải khai báo biến nếu khai báo sai kiểu Type nó vẫn phát sinh lỗi như thường.

Lắm lúc đó chính là ý chính của ngừoi viết code khi khai báo kiểu biến.
 
Upvote 0
Cảm ơn tất cả mọi người!

Có ai khác với trường hợp của em không ạ?[/QUOTE]
Code hay file? Nói chính xác xem nào...

Tìm và xóa bỏ dòng "Option Explicit".

Là file bác ạ! nguyên file như vậy có máy chạy được, có máy lại không, nên gửi file lên nặng nề mà cũng hông ý nghĩa gì. File em ko sài "Option Explicit". Máy của em thì lúc nào cũng chạy đc cả, nên không biết bị lỗi gì, mà khi gửi cho người khác thì thỉnh thoảng lại báo lỗi không khai báo biến. Bạn em vừa cài lại excel chạy lại được. Hic

Em đã kiểm tra, khi mục "Require Variable Declaration" được chọn mà trên cùng code module không có dòng "Option Explicit" thì vẫn không phải khai báo biến.
Em đã thử trên máy tính khác cũng cho kết quả tương tự.
Mục "Require Variable Declaration" được chọn có tác dụng: Khi mở một code module mới (lần đầu tiên) thì tự động thêm dòng "Option Explicit".
(Excel 64bit).

Mục "Require Variable Declaration" đúng là có t/dụng chỉ lần đầu tạo code như bạn nói. Trong file của em ko sài "Option Explicit".


Không biết có bác nào gặp trường hợp như em hông ạ!
 
Upvote 0
Nên xài Option Explicit, nếu bạn không muốn bán vài con trâu!
 
Upvote 0
Là file bác ạ! nguyên file như vậy có máy chạy được, có máy lại không
Nếu là vậy thì nguyên nhân chỉ có thể là "không tương thích".
Ví dụ: trong code bạn có dùng 1 đối tượng nào đó mà phiên bản Excel trên máy bạn có hỗ trợ còn máy khác thì không. Chẳng hạn FileSearch viết để chạy trên Excel 2003 thì được nhưng mang sang máy khác cài Excel từ 2007 trở đi lại... tèo
gửi file lên nặng nề mà cũng hông ý nghĩa gì.

Mắc mớ gì mà... nặng? Bạn xóa hết dữ liệu đi, chỉ chừa code lại là nhẹ ngay thôi. Còn cái chuyện "hông ý nghĩa gì" thì khó nói lắm. Thấy file mới khẳng định được
 
Upvote 0
Tại sao bài 5 tôi nêu chủ Topic đính kèm file với code đó và nêu rõ muốn làm gì thì sẽ dễ dàng hơn, là có lý do của nó:
1/ Trên diễn đàn có thành viên giỏi hơn sẽ giúp code khác hiệu quả hơn.
2/ Hoặc sửa lại code để biết tại sao code đó không chạy trên máy khác.
3/ Có khi chưa cài phần lập trình, nếu có cài rồi thì đôi khi quên thiết lập chế độ chạy Macro.
 
Upvote 0
Nếu là vậy thì nguyên nhân chỉ có thể là "không tương thích".
Ví dụ: trong code bạn có dùng 1 đối tượng nào đó mà phiên bản Excel trên máy bạn có hỗ trợ còn máy khác thì không. Chẳng hạn FileSearch viết để chạy trên Excel 2003 thì được nhưng mang sang máy khác cài Excel từ 2007 trở đi lại... tèo

Tôi nghĩ là bạn chỉ tốn công đoán mò.
Trong bài #1, chủ thớt có nói là chính mình chạy thì bình thường; lỗi chỉ phát sinh ở máy của bạn chủ thớt. Sau đó, ở bài #12 thì lại nói "gởi cho người khác thì THỈNH THOẢNG lại báo lỗi không khai báo biến"

Để khỏi phải đoán mò, tốt hơn hết bạn bảo ngừoi ta cóp py lại nguyên xi cái màn hình báo lỗi.
 
Upvote 0
Cảm ơn mọi người! Gửi mọi người file.

Sau khi khai báo biến thì mọi thứ ok. Vấn đề là em đã nhỡ không khai báo cho rất rất nhiều biến!

Mọi người xem xét giúp!
 

File đính kèm

Upvote 0
Phải gửi tập tin vì không phải bao giờ lỗi cũng được báo chính xác về nội dung và dòng xuất hiện. Sẽ có nhiều lần bạn thấy thế.

Khi tôi mở tập tin thì thấy báo lỗi khác như hình. Sau đó tôi nhìn thì thấy
References
Reference to SOLVER.XLAM

Mở Tools -> References thì thấy MISSING: SOLVER.XLAM

Tôi đóng tập tin -> File -> Options -> Add-Ins -> thên Solver Add-in -> mở tập tin

Không còn lỗi. Tools -> References -> không còn lỗi (có chọn Solver)

Tôi không kiểm tra nhưng bạn thử xem có cần Solver không. Nếu không thì vứt nó đi
 

File đính kèm

  • 12345.JPG
    12345.JPG
    121.5 KB · Đọc: 14
  • 6789.JPG
    6789.JPG
    40.2 KB · Đọc: 14
  • tot.JPG
    tot.JPG
    39.1 KB · Đọc: 15
Lần chỉnh sửa cuối:
Upvote 0
Phải gửi tập tin vì không phải bao giờ lỗi cũng được báo chính xác về nội dung và dòng xuất hiện. Sẽ có nhiều lần bạn thấy thế.

Khi tôi mở tập tin thì thấy báo lỗi khác như hình. Sau đó tôi nhìn thì thấy
References
Reference to SOLVER.XLAM

Mở Tools -> References thì thấy MISSING: SOLVER.XLAM

Tôi đóng tập tin -> File -> Options -> Add-Ins -> thên Solver Add-in -> mở tập tin

Không còn lỗi. Tools -> References -> không còn lỗi (có chọn Solver)

Tôi không kiểm tra nhưng bạn thử xem có cần Solver không. Nếu không thì vứt nó đi
Cảm ơn bác nhiều!

Đúng là khi bỏ "Solver" thì không còn lỗi nữa. Bác có thể giải thích giúp em vì sao "Solver" lại liên quan đến phần bắt buộc phải khai báo biến. Tại vì như hôm trước, e chỉ cần khai báo hết lại biến thì chạy ok.
 
Upvote 0
CBác có thể giải thích giúp em vì sao "Solver" lại liên quan đến phần bắt buộc phải khai báo biến.
Tôi viết
không phải bao giờ lỗi cũng được báo chính xác về nội dung và dòng xuất hiện
...
báo lỗi khác như hình

Bản thân bạn thấy là tôi làm gì có lỗi khai báo biến.

Có những lỗi hoàn toàn khác với thông báo. Có những lỗi khó hiểu. Giải thích gì ở đây? Bản thân bạn cũng thấy là bỏ Solver thì hết báo lỗi. Tức lỗi thực ra có liên quan gì tới khai báo biến đâu.
 
Upvote 0
Web KT

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

Back
Top Bottom