2011-10-07 38 views
7

Chúng tôi đã có bảng tính Exccel được sử dụng để quản lý hạn ngạch cho các kỹ sư hỗ trợ ngoài giờ. Cách đây một lúc, tôi đã thêm một chút mã VBA để tự động chuyển số điện thoại hỗ trợ sang điện thoại của kỹ sư trong vòng vài giờ.Kết nối ADODB từ VBA ngừng hoạt động

Thực hiện điều này bằng cách kết nối với cơ sở dữ liệu do nhà cung cấp điện thoại điều hành và cập nhật số chuyển hướng.

Chiều nay, nó đột nhiên không làm việc trên các máy chủ trung tâm:

Dim Db As ADODB.Connection 

Sub ConnectDatabase() 
    Set Db = New ADODB.Connection 
    Db.Open "SupportMobileDb" 
End Sub 

Mã này dừng lại ở dòng New ADODB.Connection, và các báo cáo:

Run-time error '430': 
Class does not support Automation or does not support expected 
interface 

tôi vẫn có thể chạy macro trên của tôi máy tính xách tay và nó hoạt động chính xác. Và trên máy chủ trung tâm, tôi vẫn có thể sử dụng Excel và kết nối với nguồn dữ liệu chính xác. Nó sẽ không hoạt động thông qua VBA nữa trên máy chủ này.

Macro chạy đúng lúc 9 giờ sáng và chuyển hướng tất cả điện thoại đến văn phòng, nhưng 5 giờ chiều chuyển hướng sang macro của nhân viên không hoạt động. Tôi không thể thấy rằng Windows đã được cập nhật ngày hôm nay, hoặc thực sự bất kỳ thay đổi nào khác.

Có ai từng gặp vấn đề này trước đây không?

Trả lời

16

OK tìm thấy sự cố. Dường như tại một số điểm, một trong những tài liệu tham khảo bên ngoài cho các công cụ VBA là unticked (ADO 2,8 Recordset). Tôi đã thêm trở lại tham chiếu và nó có vẻ hoạt động OK ngay bây giờ. (!)

Kể từ khi tôi đã bằng cách nào đó có 3 upvotes để trả lời câu hỏi của riêng tôi, tôi muốn tốt hơn đặt chi tiết hơn một chút trong trường hợp người khác đang nhìn thấy vấn đề này:

Trong trình soạn thảo Visual Basic, dưới Công cụ -> Tài liệu tham khảo, tôi đã chọn Microsoft ActiveX Data Objects 2.8 Library. Nhưng Microsoft ActiveX Data Objects Recordset 2.8 Library đã không được chọn. Thật thú vị, thư viện này thậm chí không xuất hiện như một tùy chọn khi nhìn vào nó trong Windows 7, nhưng các macro hoạt động mà không có nó.

Một lưu ý nữa vì rõ ràng rất nhiều người gặp sự cố này ... Câu trả lời của tôi ở trên đã giải quyết được vấn đề, nhưng chỉ cho đến khi một số người nhất định chỉnh sửa lại tệp, tại thời điểm đó, phiên bản Office của họ sẽ tự động tạo lại vấn đề, và tôi phải giải quyết nó một lần nữa.

Có hai giải pháp dài hạn:

1) Bạn có thể sử dụng vào cuối ràng buộc, và thoát khỏi thư viện tham chiếu hoàn toàn. Xem http://support.microsoft.com/kb/245115 để biết thêm chi tiết về điều này.

2) Vì mục đích của mình, tôi đã chuyển macro thành sổ làm việc khác hoàn toàn - các macro này chỉ được chạy từ máy chủ trung tâm (mọi người chỉ xem danh sách sẽ không có nguồn dữ liệu ODBC được thiết lập, vì vậy các macro sẽ không chạy anyway). Vì vậy, bây giờ bước đầu tiên VBA trong sổ làm việc của vĩ mô là để mở sổ làm việc danh sách thực tế, và sau đó chạy phần còn lại của mã VBA không thay đổi.

3

Tôi làm rất nhiều công việc của VBA và đã trải qua điều này rất nhiều trong thời gian gần đây. Tôi sẽ viết một chương trình và nó sẽ chạy tốt trong một thời gian dài (cho năm trong một số trường hợp) và sau đó một ngày một số máy tính bắt đầu nhận được lỗi này.

Một trong những điều rõ ràng hơn đối với nhà phát triển là ADODB.Connection và/hoặc ADODB.Recordset ngừng tự tự viết hoa. ADODB là chữ thường hoặc phần thứ hai là. Đôi khi, mặc dù, capiltization là tốt và nó vẫn xảy ra.

Tách việc tạo kết nối và/hoặc đối tượng bản ghi từ thay đổi mã phần "Đặt mới" đã sửa nó mỗi lần cho tôi.

Cụ thể, tinh chỉnh mã sau đây đã luôn luôn cố định này cho tôi:

Thay đổi sáng tạo của bất kỳ đối tượng kết nối từ:

Dim con as New ADODB.Connection 

Để:

Dim con as ADODB.Connection 
Set con = New ADODB.Connection 

Tương tự như vậy, thay đổi tạo bất kỳ đối tượng recordset nào từ:

Dim rs as New ADODB.Recordset 

Để:

Dim rs as ADODB.Recordset 
Set rs = New ADODB.Recordset 
2

Tôi đã có một vấn đề tương tự nơi mã VBA của tôi hoạt động tốt trên máy tính cục bộ của tôi (Windows 7), nhưng chạy nó từ một máy chủ Citrix (Windows 2003 Server) không và thất bại với một lỗi thời gian chạy là 430 khi cố gắng tạo kết nối (Set Conn = New ADODB.Connection).

Tôi không nghĩ về sự khác biệt trong các phiên bản cửa sổ cho đến khi đọc những phản ứng, và vì vậy khi tôi kiểm soát "Microsoft ActiveX Data Objects 2.8 Library" và kiểm tra "Microsoft ActiveX Data Objects 2.7 Library", tất cả làm việc tốt.

Chỉ muốn truyền điều này và nói lời cảm ơn về những bài đăng này đã đưa tôi đi đúng hướng.

Các vấn đề liên quan