Lỗi "User-defined type not defined" khi khai báo biến

Liên hệ QC

Nguyen Rem

Tất cả chỉ là đưa ra quyết định đúng đắn
Tham gia
23/2/22
Bài viết
211
Được thích
30
Giới tính
Nữ
Em chào các anh chị ^^
Hiện tại em đang gặp một chút rắc rối khi đọc tài liệu về "Application.OpenAccessObject (Access) Method " mong các anh chị cùng em khắc phục lỗi nhé.
Em có đoạn code sau dùng để kết nối với database lưu ở Access . Nhưng sau khi chạy đến chỗ khai báo(Bôi màu xanh) thì nó bị lỗi .
1656809095190.png
Đoạn code này là phần Example của link sau:

Loay hoay một lúc thì em có thay đổi cách khai báo như sau:
1656809210358.png
Thi nó chạy được . Nhưng em không hiểu vì sao cách khai báo ở sub "Test" nó lại được còn cách khai báo ở sub "Test1" nó lại bị lỗi . --Mong các anh chị giải thích giúp em--
Với nếu khai báo này thì nó bị mất cái "intelligence" làm người mới như em rất khó để sử dụng nên em không muốn khai báo theo cách này . Các anh chị xem thế nào giúp em khắc phục lỗi để khai báo được theo cách của Sub "Test1" với ạ.
Tất cả code em lưu ở trong Module1 mong các anh chị vào đó chạy thử giúp em
 

File đính kèm

  • Test.xlsm
    14.7 KB · Đọc: 2
Thi nó chạy được . Nhưng em không hiểu vì sao cách khai báo ở sub "Test" nó lại được còn cách khai báo ở sub "Test1" nó lại bị lỗi . --Mong các anh chị giải thích giúp em--
Với nếu khai báo này thì nó bị mất cái "intelligence" làm người mới như em rất khó để sử dụng nên em không muốn khai báo theo cách này . Các anh chị xem thế nào giúp em khắc phục lỗi để khai báo được theo cách của Sub "Test1" với ạ.
Tất cả code em lưu ở trong Module1 mong các anh chị vào đó chạy thử giúp em

Vụ này liên quan đến khai báo sớm và muộn, bạn kiếm tài liệu về Early-binding và Late binding tham khảo nhé.
Đối với cái ví dụ Test1 là khai báo sớm (Early-binding) nên buộc bạn phải khai báo, chỉ định rõ thư viện cho nó. Vô Reference - thêm thư viện Microsoft Access xx.x Object Library vào là chạy phà phà với Intellisense.
 
Upvote 0
Vụ này liên quan đến khai báo sớm và muộn, bạn kiếm tài liệu về Early-binding và Late binding tham khảo nhé.
Đối với cái ví dụ Test1 là khai báo sớm (Early-binding) nên buộc bạn phải khai báo, chỉ định rõ thư viện cho nó. Vô Reference - thêm thư viện Microsoft Access xx.x Object Library vào là chạy phà phà với Intellisense.
Dạ vâng ạ ! Nhưng mà tại sao anh lại biết phải thêm cái thư viện Access xx.x Object Library vào ạ . Em cũng nghĩ là phải thêm một cái thư viện nào đó nhưng không biết phải thêm cái thư viện nào . Lúc gặp vấn đề đó thì anh xử lý thế nào ạ ? Cách để kiếm một cái thư viện phù hợp thế nào ?
Còn cái tài liệu liên quan đến Early-Binding và late-Binding thì em sẽ kiếm đọc sau ạ ^^
 
Upvote 0
Vụ này liên quan đến khai báo sớm và muộn, bạn kiếm tài liệu về Early-binding và Late binding tham khảo nhé.
Đối với cái ví dụ Test1 là khai báo sớm (Early-binding) nên buộc bạn phải khai báo, chỉ định rõ thư viện cho nó. Vô Reference - thêm thư viện Microsoft Access xx.x Object Library vào là chạy phà phà với Intellisense.
Tôi nhớ khai báo sớm hình như là phải thêm thư viện Microsoft Scripting Runtime nữa chứ nhỉ?
 
Upvote 0
Dạ vâng ạ ! Nhưng mà tại sao anh lại biết phải thêm cái thư viện Access xx.x Object Library vào ạ . Em cũng nghĩ là phải thêm một cái thư viện nào đó nhưng không biết phải thêm cái thư viện nào . Lúc gặp vấn đề đó thì anh xử lý thế nào ạ ? Cách để kiếm một cái thư viện phù hợp thế nào ?
Còn cái tài liệu liên quan đến Early-Binding và late-Binding thì em sẽ kiếm đọc sau ạ
Kinh nghiệm + Google. :)
Khi tạo đối tượng, bạn không dùng CreateObject thì nó là Early binding. Nếu nó báo lỗi thì bạn google: "library for object Access Application" hoặc "VBA cannot use Access.Application object",....
Kinh nghiệm sẽ cho bạn biết nó thuộc thư viện nào..:D
 
Upvote 0
Kinh nghiệm + Google. :)
Khi tạo đối tượng, bạn không dùng CreateObject thì nó là Early binding. Nếu nó báo lỗi thì bạn google: "library for object Access Application" hoặc "VBA cannot use Access.Application object",....
Kinh nghiệm sẽ cho bạn biết nó thuộc thư viện nào..:D
Tự đoán và mò chứ kinh nghiệm gì?
Chỉ là người có kinh nghiệm thì đoán gần hơn thôi.
Ví dụ các COM độc đáo như Đít sần thì mình đoán nó thuộc Script bởi vì kinh nghiệm cho biết Windows cần Script để làm những việc thông dụng. Tìm không thấy thì thử thằng kế tiếp là VBScript (điển hình: réc éc). Cứ vậy mà mò...

Early binding là từ đầu, lúc khai báo biến mình đã cho VBA biết nó chính xác là kiểu biến gì (loại oibject nào). VBA 'binds (kết nối)' kiểu ngay lúc ấy. Chính vì vậy mà intellisense mới biết kiểu object mà hoạt động. Tất cả các lệnh gọi thuộc tính và phương thức đều được kết nối rõ rệt (sớm).
Các library references mục đích là để VBA nhận ra các objects này mà kết nối. Có hai lý do tại sao VBA bắt buộc phải reference:
1. Bỏ cả đống vào sẽ làm Excel nặng. VBA chỉ tự động references các thư viện căn bản thôi.
2. Có những thư viện (dll) do người dùng tự tạo. Người dùng bắt buộc phải tự reference lấy.

Late binding là lúc khai báo biến, chỉ cho VBA biết là nó là loại Object. Object là class cơ bản, tất cả mọi classes khác đều có gốc thừa kế từ đấy, và vì vậy biến có thể 'biến hình' thành bất cứ loại object nào khác (căn bản lý thuyết LTHĐT). Lúc chạy code, đến lệnh Set thì VBA mới biết loại object. Và vì thế tất cả các thuộc tính mà nó gọi đều kết nối trễ.

Lưu ý là có một số thuộc tính mặc định của COM mà chỉ kết nối sớm mới hoạt động tốt. Kết nối trễ khôing biết các mặc định này, và có thể không chạy được. Điều này đã có vài thớt bàn qua rồi. Bạn nào thắc mắc thì chịu khó tìm (gợi ý: đít sần)
 
Lần chỉnh sửa cuối:
Upvote 0
Dạ vâng ạ ! Em đã đọc bài của các anh rồi ạ ^^ . Em cảm ơn các anh nhiều lắm . Em sẽ tiếp tục tìm hiểu rồi có gì không hiểu sẽ cùng các anh thảo luận sau :> Em cảm ơn !
 
Upvote 0
Tự đoán và mò chứ kinh nghiệm gì?
Chỉ là người có kinh nghiệm thì đoán gần hơn thôi.
Ví dụ các COM độc đáo như Đít sần thì mình đoán nó thuộc Script bởi vì kinh nghiệm cho biết Windows cần Script để làm những việc thông dụng. Tìm không thấy thì thử thằng kế tiếp là VBScript (điển hình: réc éc). Cứ vậy mà mò...

Early binding là từ đầu, lúc khai báo biến mình đã cho VBA biết nó chính xác là kiểu biến gì (loại oibject nào). VBA 'binds (kết nối)' kiểu ngay lúc ấy. Chính vì vậy mà intellisense mới biết kiểu object mà hoạt động. Tất cả các lệnh gọi thuộc tính và phương thức đều được kết nối rõ rệt (sớm).
Các library references mục đích là để VBA nhận ra các objects này mà kết nối. Có hai lý do tại sao VBA bắt buộc phải reference:
1. Bỏ cả đống vào sẽ làm Excel nặng. VBA chỉ tự động references các thư viện căn bản thôi.
2. Có những thư viện (dll) do người dùng tự tạo. Người dùng bắt buộc phải tự reference lấy.

Late binding là lúc khai báo biến, chỉ cho VBA biết là nó là loại Object. Object là class cơ bản, tất cả mọi classes khác đều có gốc thừa kế từ đấy, và vì vậy biến có thể 'biến hình' thành bất cứ loại object nào khác (căn bản lý thuyết LTHĐT). Lúc chạy code, đến lệnh Set thì VBA mới biết loại object. Và vì thế tất cả các thuộc tính mà nó gọi đều kết nối trễ.

Lưu ý là có một số thuộc tính mặc định của COM mà chỉ kết nối sớm mới hoạt động tốt. Kết nối trễ khôing biết các mặc định này, và có thể không chạy được. Điều này đã có vài thớt bàn qua rồi. Bạn nào thắc mắc thì chịu khó tìm (gợi ý: đít sần)
Anh ơi ! Anh cho em hỏi với :>
Nếu giờ em học về Access là em học cái khoanh tròn màu đỏ đúng không anh . Còn cái màu xanh thì bỏ đúng không ạ . Hay là anh phân biệt cho em hai cái này đi ^^ . Em sợ học nhầm tốn thời gian lắm
1656849159584.png
 
Upvote 0
Anh ơi ! Anh cho em hỏi với :>
Nếu giờ em học về Access là em học cái khoanh tròn màu đỏ đúng không anh . Còn cái màu xanh thì bỏ đúng không ạ . Hay là anh phân biệt cho em hai cái này đi ^^ . Em sợ học nhầm tốn thời gian lắm
Tôi cũng chả hiểu xanh đỏ gì cả.
Nếu tôi học Access (CSDL LH) thì tôi chú trọng (xếp theo thứ tự ưu tiên):
1. Các bậc chuẩn 1, 2, 3. Khi nào phải hy sinh chuẩn để đạt tốc độ.
2. Tầm vực của một phát sinh (transaction): commit và rollback.
3. Các sự kiện và code sự kiện.
4. Ý nghĩa của liên hệ và ràng buộc ngầm.
 
Lần chỉnh sửa cuối:
Upvote 0
Tôi cũng chả hiểu xanh đỏ gì cả.
Nếu tôi học Access (CSDL LH) thì tôi chú trọng (xếp theo thứ tự ưu tiên):
1. Các bậc chuẩn 1, 2, 3. Khi nào phải hy sinh chuẩn để đạt tốc độ.
2. Tầm vực của một phát sinh (transaction): commit và rollback.
3. Các sự kiện và code sự kiện.
4. Ý nghĩa của liên hệ và ràng buộc ngầm.
Dạ vâng ạ ! Em cảm ơn anh nhiều ! Tuy chưa thực sự hiểu lắm nhưng mà thôi ! Cứ đi dần dần vậy! Lạc cũng kệ :>
Cảm ơn mọi người vì đã bỏ thời gian ra đọc bài viết này và cùng em khắc phục lỗi ^^
Em cảm ơn !
 
Upvote 0
Anh ơi ! Anh cho em hỏi với :>
Nếu giờ em học về Access là em học cái khoanh tròn màu đỏ đúng không anh . Còn cái màu xanh thì bỏ đúng không ạ . Hay là anh phân biệt cho em hai cái này đi ^^ . Em sợ học nhầm tốn thời gian lắm
View attachment 278256

Chỉ nên học thiết kế Access Desktop Application thôi, còn muốn thiết kế Web App thì nên học các ngôn ngữ chuyên về Web là hay nhất (Javascript, html, css, mySQL v.v..)
 
Upvote 0
Chỉ nên học thiết kế Access Desktop Application thôi, còn muốn thiết kế Web App thì nên học các ngôn ngữ chuyên về Web là hay nhất (Javascript, html, css, mySQL v.v..)
Web App thì Access chi vướng bận lắm.
SQLLite và mySQL là hướng nên đi.
(nếu tầm vực sử dụng cần trên 2 loại này thì không nên hỏi ở GPE này. Đi vào mấy diễn đàn chuyên nghiệp về CSDL họ giỏi hơn)
 
Upvote 0
Web App thì Access chi vướng bận lắm.
SQLLite và mySQL là hướng nên đi.
(nếu tầm vực sử dụng cần trên 2 loại này thì không nên hỏi ở GPE này. Đi vào mấy diễn đàn chuyên nghiệp về CSDL họ giỏi hơn)
Em thì nghĩ là không nên chuyển diễn đàn ^^ . Kiểu em vào đây rồi học VBA các thứ là để thành thạo hẳn một ngôn ngữ lập trình (em muốn học VBA là ngôn ngữ lập trình đầu tiên thay vì C) , học cách tư duy , cách giải quyết làm sao khi gặp một vấn đề khó . Mà đã vậy ở trên này rất nhiều người đã lớn tuổi ( có thể cách em tận 2 thế hệ) , bằng tuổi bố cũng có , bằng tuổi ông cũng có. Thì chắc họ có đủ khả năng để chỉ bảo cho mình mà lại còn rất nhiệt tình nữa (là một môi trường cực tốt) . Tuy lớn tuổi nhưng em thấy kiến thức mà các anh nói thật sự vẫn rất là giá trị. Có thể đôi lúc giao tiếp nó không được nhất quán cho lắm vì ảnh hưởng bởi khoảng cách thể hệ nhưng mà em hiện tại vẫn thấy rất ổn (Cái gì không biết thì tự nghiên cứu thêm) :> .Cái quan trọng nhất là mọi người chịu hy sinh thời gian lẫn tâm trí cực kì có hạn để đi giúp người --Một điều kì lạ chưa em chưa hề có câu trả lời-- .
Nhưng mà thử hỏi "Nếu họ sống đến 60, 70 tuổi thì họ thực sự cần những gì ?" --Một câu hỏi mở -- ^^
 
Upvote 0
Người ta sống đến 60/70 mỗi người có mục đích riêng. Nếu moi người ai cũng như nhau thì thế gian chán phèo. Cả thiên hạ có khác gì đàn gà. Gà trống ráng đạp gà mái. Gà mái đẻ trứng chăm con đến ngày cạn buồng trứng.

Riêng tôi thì chỉ ráng thử đến ngày 73 để nói câu "ngũ thập niên tiền nhị thập tam (Nguyễn Công Trứ)"
Thì cũng là một dạng gà trống vè mái. Chỉ khác cái danh vị của người nói thôi.
 
Upvote 0
. . ;. . . . . . . . . . . . . . . . . . . . . . . . . . .Cái quan trọng nhất là mọi người chịu hy sinh thời gian lẫn tâm trí cực kì có hạn để đi giúp người --(1) Một điều kì lạ chưa em chưa hề có câu trả lời-- .Nhưng mà thử hỏi "Nếu họ sống đến 60, 70 tuổi thì họ thực sự cần những gì ?" --Một câu hỏi mở -- ^^
(1) Để trả lời cho câu hỏi: "Những người >60 tuổi cần gì?" thì bạn phải trãi qua các công đoạn sau:
(*) Trước tiên hỏi ngay những người thân của bạn ở độ tuổi này; Mà trước khi hỏi nên quan sát xem họ cần gì là chủ yếu
(*) Tiếp theo là tiếp xúc & hỏi những người hàng xóm, lân bang ở độ tuổi đó có những nhu cầu thiết yếu gì?
(*) Cuối cùng là tìm đọc những suy tư của những người này (thổ lộ ít ỏi) trên diễn đàn này

♥ Riêng với mình thì không như bạn nghĩ (về thời gian): Mình rất thừa mứa thời gian, nên lên đây là để giết/tiêu tốn thời gian.
♦ Lên đây để lượm lặc, ôn luyện kiến thức Excel nói riêng hay tựu chung là làm cho não giữ hoạt động, chậm thoái hóa phần nào, được tẹo nào hay tẹo đó
♣ Để mình được còn là công dân mạng, tiếp xúc ảo với mọi người trên khắp nhân gian (qua các diễn đàn, qua các ván cờ vua bất chợt với 1 ai đó chưa hề gặp mặt, biết tên hay chào hỏi. . . )
♠ Tóm lại, tuổi đó sẽ sống chậm lại & cần nhất là cần xác định cho mình sẽ sống như thế nào & sẽ chết nên như thế nào . . . . .
. . . . . . .


Em thì nghĩ là không nên chuyển diễn đàn ^^ . . . . . .
Mình cho là bạn đang đúng, nhưng chưa đủ: Nên tham gia thêm những diễn đàn mà anh í khuyên bạn!
 
Upvote 0
...
♠ Tóm lại, tuổi đó sẽ sống chậm lại & cần nhất là cần xác định cho mình sẽ sống như thế nào & sẽ chết nên như thế nào . . . . .
. . . . . . .
Ở trên là tôi "thích" có điều kiện nhé. Tức là tôi chỉ đồng ý câu này.
Sống đến 60, nhiều người lập sự nghiệp xong, còn muốn hưởng thêm vài năm nữa. Vì vậy phải xác định 3 loại:
1. chả có sự nghiệp gì cả, thôi về hưu cho khỏe. Có thể nằm tỏn tình trạng muốn làm tiếp cũng chẳng ai cho.
2. sự nghiệp dưng chỉ mới 5-10 năm gần đây. Bỏ thì uổng. Thế là tiếp tục đến 70 xem sao.
3. sự nghiệp cả đống, nhưng bổn tính không tin ai cho nên không giao bớt công việc được để khỏe thân. Lớp này có thể bám níu công việc đến ngày xụm bà chè.

70 thì cần khách quan xét lại sức khỏe của mình. Nếu không vướng bận ai thì cứ vung văng thoải mái. Nếu bệnh hoạn, vướng bận con cháu thì là chuyện khác. Câu này chỉ có thể nói cho lớp 1 và 2 trên. Lớp thứ 3 thì phải xem lại đã học được tính khách quan và nghệ thuật tin người chưa.

(*1) cái phần về lớp thứ 3 là tôi cố tình nói móc. Ai nhột tự biết.
 
Upvote 0
Dóc. Cái bản mặt này làm quái gì có "sự nghiệp cả đống"
Cái sự nghiệp tạo danh xưng chết tiệt chỉ cần 1 mình nó là đã to lắm rồi nhé. Chả tin ai để bàn giao cả nhé!
TB
Chưa được ngũ thập niên tiền, nhưng cũng sắp tứ thập niên tiền nhị thập two rồi à.
 
Upvote 0
Web KT

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

Back
Top Bottom