Microsoft Excel ActiveX Controls bị vô hiệu hóa?


113

Tôi có một số trang tính Excel sử dụng hộp kiểm ActiveX để kiểm soát hoạt động nhất định. Họ làm việc gần đây nhưng hôm nay bắt đầu đưa ra lỗi. Tôi đã được cảnh báo về điều này bởi một đồng nghiệp, nhưng nó vẫn hoạt động trên máy tính của tôi. Tôi đã kiểm tra phiên bản Excel của anh ấy so với của tôi và phiên bản của anh ấy mới hơn. Tôi nhận thấy có các bản cập nhật Windows mới, vì vậy tôi đã cập nhật. Sau khi tôi áp dụng các bản cập nhật đang chờ xử lý, hiện nó không còn hoạt động trên máy tính của tôi nữa. Tôi không thể kiểm tra các hộp kiểm ActiveX nữa và, như một phần của việc cố gắng gỡ lỗi, có vẻ như tôi thậm chí không thể thêm điều khiển ActiveX vào bất kỳ trang tính nào, ngay cả một trang tính mới, bất kỳ nữa. Tôi nhận được một hộp thoại lỗi cho biết, "Không thể chèn đối tượng." (Tôi vẫn có thể thêm điều khiển biểu mẫu, chỉ là không ActiveX.) Có ai khác gặp phải vấn đề này sau bản cập nhật gần đây không? Bất kỳ đề xuất?

Cảm ơn,

Mike


nó đã kiểm soát cụ thể những gì? hay ý bạn là TẤT CẢ ActiveX?
nhìn ra

3 đồng nghiệp của tôi dường như cũng gặp vấn đề này. Tôi nghĩ rằng bảng tính của họ sử dụng các điều khiển ActiveX - ComboBoxes và Buttons. Một trong số họ đã làm việc trên PC của anh ấy và do đó không nhận được bản cập nhật. Khi anh ta lấy lại nó, nó đã chạy thành công các điều khiển. Đó là, cho đến khi PC của anh ấy tự động cập nhật. Bây giờ nó không. Chúng tôi cũng không thể thêm điều khiển ActiveX vào trang tính của họ.
Mitchell Kaplan

5
Tôi cũng đang gặp sự cố này cũng như tất cả người dùng trong công ty của tôi. Làm cách nào MS có thể phát hành bản cập nhật phá vỡ điều khiển ActiveX trong Excel? Điều này là điên.
harryg

3
@ vba4all: không, đây là câu hỏi lập trình và thuộc về đây.
Harry Johnston

2
@ vba4all: Điều khiển ActiveX là một công cụ lập trình - phải không? Bạn sẽ sử dụng chúng để làm gì khác? Ví dụ: sẽ khác nếu OP hỏi về một sản phẩm bên thứ ba cụ thể (xảy ra sử dụng VBA) đã ngừng hoạt động. Nhưng trong trường hợp này, có vẻ như mã của chính anh ta đã bị ảnh hưởng?
Harry Johnston

Câu trả lời:


159

Từ các diễn đàn khác, tôi đã biết rằng đó là do MS Update và cách khắc phục tốt là chỉ cần xóa tệp MSForms.exd khỏi bất kỳ thư mục con Temp nào trong hồ sơ của người dùng. Ví dụ:

C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\MSForms.exd

C:\Users\[user.name]\AppData\Local\Temp\VBE\MSForms.exd

C:\Users\[user.name]\AppData\Local\Temp\Word8.0\MSForms.exd

Tất nhiên ứng dụng (Excel, Word ...) phải được đóng để xóa tệp này.


1
Tôi có một PC chưa được cập nhật. Tôi đã mở Excel và có thể thêm nút ActiveX. Tôi đã tìm kiếm C: \ Users [user.name] \ AppData \ Local \ Temp \ Excel8.0 \ MSForms.exd, nhưng không có thư mục Excel8.0. Sau đó tôi đã chạy cập nhật Windows. Tôi đã thử thêm một lần nữa nút ActiveX vào bảng tính của mình nhưng không được. Tôi cũng lưu ý rằng bây giờ tôi đã có Excel8.0 \ MSForms.exd đó. Tôi đã xóa nó và không cần khởi động lại Excel đã mở lại và bây giờ có thể thêm nút ActiveX. Cảm ơn!
Mitchell Kaplan

2
Cảm ơn bạn!! Quá trình này đã khắc phục sự cố trên máy tính của tôi. Tôi cảm thấy đối với các nhà phát triển có bản phát hành công khai lớn rằng điều này bị hỏng ... Hy vọng rằng MS sẽ đưa ra bản sửa lỗi.
Mike Pedersen

1
Điều này đã không làm việc cho tôi. Tôi đang thực hiện khôi phục hệ thống về 12/7/14 trên một trong các máy tính của chúng tôi để xem liệu điều đó có khắc phục được không. Tôi cũng đã thử xóa một nút và thay thế nó theo một câu trả lời bên dưới, nhưng tôi nhận được thông báo bật lên "Không thể chèn Đối tượng" hoặc tương tự như vậy.
Mountainclimber

1
Đối với người dùng Windows XP Thư mục con Temp có thể được tìm thấy tại đây: C: \ Documents and Settings \ [user.name] \ Local Settings \ Temp \ Excel8.0 \ MSForms.exd
bjtilley 16/12/14

2
Sau khi xóa các tệp trên, nó không hoạt động với tôi, nhưng sau đó tôi tìm thấy các tệp này trong thư mục C: / Windows / Temp và đã xóa chúng. Sau đó, tôi đã có thể làm cho vấn đề này hoạt động.
QV1

35

Đây là câu trả lời hay nhất mà tôi đã tìm thấy trên Blog nhóm hỗ trợ Microsoft Excel

Đối với một số người dùng, Kiểm soát biểu mẫu (FM20.dll) không còn hoạt động như mong đợi sau khi cài đặt các bản cập nhật tháng 12 năm 2014. Đôi khi gặp phải sự cố chẳng hạn như khi họ mở tệp với các dự án VBA hiện có bằng cách sử dụng điều khiển biểu mẫu, cố gắng chèn điều khiển biểu mẫu vào trang tính mới hoặc chạy phần mềm của bên thứ ba có thể sử dụng các thành phần này.

Bạn có thể nhận được các lỗi như:

"Không thể chèn đối tượng" "Thư viện đối tượng không hợp lệ hoặc chứa tham chiếu đến định nghĩa đối tượng không thể tìm thấy"

Ngoài ra, bạn có thể không sử dụng hoặc thay đổi thuộc tính của điều khiển ActiveX trên trang tính hoặc gặp lỗi khi cố gắng tham chiếu điều khiển ActiveX như một thành viên của trang tính thông qua mã. Các bước cần thực hiện sau khi cập nhật:

Để giải quyết vấn đề này, bạn phải xóa các phiên bản đã lưu trong bộ đệm ẩn của các thư viện loại điều khiển (tệp bộ mở rộng) trên máy khách. Để thực hiện việc này, bạn phải tìm kiếm các tệp có phần mở rộng tên tệp ".exd" trên đĩa cứng và xóa tất cả các tệp .exd mà bạn tìm thấy. Các tệp .exd này sẽ được tạo lại tự động khi bạn sử dụng các điều khiển mới vào lần tiếp theo bạn sử dụng VBA. Các tệp bộ mở rộng này sẽ nằm trong hồ sơ của người dùng và cũng có thể ở các vị trí khác, chẳng hạn như sau:

% appdata% \ Microsoft \ form

% temp% \ Excel8.0

% temp% \ VBE

Giải pháp viết kịch bản:

Vì sự cố này có thể ảnh hưởng đến nhiều máy, nên cũng có thể tạo giải pháp tập lệnh để xóa các tệp EXD và chạy tập lệnh như một phần của quy trình đăng nhập bằng chính sách. Tập lệnh bạn cần phải chứa các dòng sau và cần được chạy cho từng USER vì tệp .exd là dành riêng cho USER.

del% temp% \ vbe \ *. exd

del% temp% \ excel8.0 \ *. exd

del% appdata% \ microsoft \ form \ *. exd

del% appdata% \ microsoft \ local \ *. exd

del% appdata% \ Roaming \ microsoft \ form \ *. exd

del% temp% \ word8.0 \ *. exd

del% temp% \ PPT11.0 \ *. exd

Bước bổ sung:

Nếu các bước trên không giải quyết được sự cố của bạn, bạn có thể kiểm tra một bước khác (xem cảnh báo bên dưới):

  1. Trên máy được cập nhật đầy đủ và sau khi xóa tệp .exd, hãy mở tệp trong Excel với quyền chỉnh sửa.

    Mở Visual Basic for Applications> sửa đổi dự án bằng cách thêm nhận xét hoặc chỉnh sửa thuộc một số loại vào bất kỳ mô-đun mã nào> Gỡ lỗi> Biên dịch VBAProject.

    Lưu và mở lại tệp. Kiểm tra độ phân giải. Nếu được giải quyết, hãy cung cấp dự án cập nhật này cho những người dùng khác.

    Cảnh báo: Nếu bước này giải quyết được sự cố của bạn, hãy lưu ý rằng sau khi triển khai dự án cập nhật này cho những người dùng khác, những người dùng này cũng sẽ cần phải xóa các bản cập nhật trên hệ thống của họ và cả tệp .exd.

Nếu cách này không giải quyết được sự cố của bạn, đó có thể là một sự cố khác và có thể cần khắc phục sự cố thêm.

Microsoft hiện đang giải quyết vấn đề này. Xem blog để cập nhật.

Nguồn


3
kiểm tra Nguồn được liên kết, nó hiện đã được cập nhật giải pháp Kịch bản
peterson

Trên máy của tôi,% appdata% được định nghĩa là "C: \ Users \ <người dùng hiện tại> \ AppData \ Roaming \", vì vậy không có thư mục "% appdata% \ microsoft \ local \". Ngoài ra, "% appdata% \ Roaming \ microsoft \ form \" dường như là dư thừa, vì "C: \ Users \ <người dùng hiện tại> \ AppData \ Roaming \ Roaming \ microsoft \ form \" và một lần nữa, không có thư mục nào như vậy tồn tại trên máy của tôi.
pstraton

15

Đó là KB2553154 . Microsoft cần phát hành bản sửa lỗi. Là nhà phát triển ứng dụng Excel, chúng tôi không thể truy cập tất cả các máy tính khách hàng của mình và xóa tệp khỏi chúng. Chúng tôi đang bị đổ lỗi cho một cái gì đó mà Microsoft đã gây ra.


1
Ngoài ra còn có KB2596927 và KB2726958, tùy thuộc vào phiên bản Office bạn đang chạy.
Harry Johnston

13

Tôi là một nhà phát triển Excel và tôi chắc chắn cảm thấy đau đớn khi điều này xảy ra. May mắn thay, tôi đã có thể tìm ra cách giải quyết bằng cách đổi tên tệp MSForms.exd trong VBA ngay cả khi Excel đang chạy, điều này cũng có thể khắc phục sự cố. Các nhà phát triển Excel cần phân phối bảng tính của họ có thể thêm mã VBA sau vào bảng tính của họ để giúp chúng miễn nhiễm với bản cập nhật MS.

Đặt mã này trong bất kỳ mô-đun nào.

Public Sub RenameMSFormsFiles() 
  Const tempFileName As String = "MSForms - Copy.exd"  
  Const msFormsFileName As String = "MSForms.exd"  
  On Error Resume Next 

  'Try to rename the C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\MSForms.exd file  
  RenameFile Environ("TEMP") & "\Excel8.0\" & msFormsFileName, Environ("TEMP") & "\Excel8.0\" & tempFileName 
  'Try to rename the C:\Users\[user.name]\AppData\Local\Temp\VBE\MSForms.exd file  
  RenameFile Environ("TEMP") & "\VBE\" & msFormsFileName, Environ("TEMP") & "\VBE\" & tempFileName 
End Sub  

Private Sub RenameFile(fromFilePath As String, toFilePath As String) 
  If CheckFileExist(fromFilePath) Then 
      DeleteFile toFilePath  
      Name fromFilePath As toFilePath  
  End If  
End Sub

Private Function CheckFileExist(path As String) As Boolean 
  CheckFileExist = (Dir(path) <> "")  
End Function  

Private Sub DeleteFile(path As String) 
  If CheckFileExist(path) Then 
      SetAttr path, vbNormal  
      Kill path  
  End If  
End Sub    

Chương trình con RenameMSFormsFiles cố gắng đổi tên tệp MSForms.exd trong thư mục C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\C:\Users\[user.name]\AppData\Local\Temp\VBE\thành MSForms - Copy.exd.

Sau đó, gọi chương trình con RenameMSFormsFiles ở đầu sự kiện Workbook_Open.

Private Sub Workbook_Open() 
  RenameMSFormsFiles  
End Sub

Bảng tính sẽ cố gắng đổi tên các tệp MSForms.exd khi nó mở ra. Rõ ràng, đây không phải là một bản sửa lỗi hoàn hảo:

  1. Người dùng bị ảnh hưởng sẽ vẫn gặp phải lỗi điều khiển ActiveX khi chạy mã VBA trong lần đầu tiên mở bảng tính. Chỉ sau khi thực thi mã VBA một lần và khởi động lại Excel, sự cố đã được khắc phục. Thông thường, khi người dùng gặp phải một bảng tính bị hỏng, phản ứng đầu gối là đóng Excel và cố gắng mở lại bảng tính. :)
  2. Tệp MSForms.exd được đổi tên mỗi khi mở bảng tính, ngay cả khi không có vấn đề gì với tệp MSForms.exd. Nhưng bảng tính sẽ hoạt động tốt.

Ít nhất là hiện tại, các nhà phát triển Excel có thể tiếp tục phân phối công việc của họ với giải pháp này cho đến khi Microsoft phát hành bản sửa lỗi.

Tôi đã đăng giải pháp này ở đây .


Cảm ơn Yi. Nó làm việc cho tôi nhưng tôi đã phải khởi động lại tôi Excel 2010 (nó có thể được liên kết với thực tế là tôi đã chạy soạn thảo VBA cùng một lúc?)
J. Chomel

5

Với Windows 8.1, tôi không thể tìm thấy bất kỳ tệp .exd nào bằng cách sử dụng tìm kiếm trên windows. Mặt khác, một lệnh cmd đã dir *.exd /Stìm thấy một tệp trên hệ thống của tôi.


3

Lời khuyên bằng KB trở lên không phù hợp với tôi. Tôi phát hiện ra rằng nếu một người dùng Excel 2007 (có hoặc không có bản cập nhật bảo mật; không chắc chắn về các trường hợp chính xác gây ra điều này) lưu tệp, thì lỗi ban đầu sẽ trả về.

Tôi phát hiện ra rằng cách nhanh nhất để sửa lại tệp là xóa tất cả mã VBA. Tiết kiệm. Sau đó thay thế mã VBA (sao chép / dán). Tiết kiệm. Trước khi thực hiện việc này, tôi xóa các tệp .EXD trước, vì nếu không, tôi sẽ gặp lỗi khi mở.

Trong trường hợp của tôi, tôi không thể nâng cấp / cập nhật tất cả người dùng tệp Excel của mình ở các vị trí khác nhau. Vì sự cố trở lại sau khi một số người dùng lưu tệp Excel, tôi sẽ phải thay thế điều khiển ActiveX bằng một thứ khác.


2
Không có đề xuất nào phù hợp với tôi ngoại trừ lưu tệp dưới dạng XLSX (xóa tất cả mã), sau đó dán lại như bạn đã làm - lưu lại dưới dạng XLSM. Nỗi đau lớn, MASSIVE đối với Microsoft. Cài đặt lại văn phòng không sửa chữa nó cho tôi, hoặc để không ai lãng phí thời gian của bạn cố gắng mà
DontFretBrett

2

Hướng dẫn đơn giản cho người dùng cuối. Vui lòng sao chép / dán nội dung sau.

Dưới đây là cách khắc phục sự cố khi nó xuất hiện:

  1. Đóng tất cả các chương trình và tệp Office của bạn.
  2. Mở Windows Explorer và nhập% TEMP% vào thanh địa chỉ, sau đó nhấn Enter. Thao tác này sẽ đưa bạn vào thư mục tạm thời của hệ thống.
  3. Định vị và xóa các thư mục sau: Excel8.0, VBE, Word8.0
  4. Bây giờ hãy thử sử dụng lại tệp của bạn, nó sẽ không có vấn đề gì.

Bạn có thể cần đợi cho đến khi sự cố xảy ra để bản sửa lỗi này hoạt động. Áp dụng nó quá sớm (trước khi Windows Update được cài đặt trên hệ thống của bạn) sẽ không giúp ích được gì.


2

Nguồn thông tin và cập nhật tốt nhất về vấn đề này mà tôi có thể tìm thấy là trong TechNet Blogs »Blog của Nhóm hỗ trợ Microsoft Excel (như đã đề cập):

Kiểm soát biểu mẫu ngừng hoạt động sau Cập nhật tháng 12 năm 2014 (Cập nhật ngày 10 tháng 3 năm 2015)

Vào tháng 3 năm 2015, một hotfix đã được phát hành cùng với hướng dẫn tự động sửa lỗi và thủ công, đồng thời nó cũng có sẵn trên Windows Update.

Bản cập nhật mới nhất và bản sửa lỗi từ Microsoft: 3025036 lỗi "Không thể chèn đối tượng" trong giải pháp Office tùy chỉnh ActiveX sau khi bạn cài đặt bản cập nhật bảo mật MS14-082

TÌNH TRẠNG: Cập nhật ngày 10 tháng 3 năm 2015:

Các bản sửa lỗi cho sự cố này đã được phát hành trong Bản cập nhật tháng 3 năm 2015 cho Office 2007, 2010 & 2013.

Thông tin chung về sự cố:

Đối với một số người dùng, Điều khiển biểu mẫu (FM20.dll) không còn hoạt động như mong đợi sau khi cài đặt Bản cập nhật bảo mật Microsoft Office MS14-082 cho tháng 12 năm 2014. Đôi khi gặp sự cố chẳng hạn như khi họ mở tệp bằng các dự án VBA hiện có bằng điều khiển biểu mẫu, hãy thử để chèn điều khiển biểu mẫu vào một trang tính mới hoặc chạy phần mềm của bên thứ ba có thể sử dụng các thành phần này.

https://technet.microsoft.com/en-us/library/security/ms14-082.aspx

Bạn có thể nhận được các lỗi như: "Không thể chèn đối tượng"; "Thư viện đối tượng không hợp lệ hoặc chứa các tham chiếu đến định nghĩa đối tượng không thể tìm thấy"; "Chương trình được sử dụng để tạo đối tượng này là Biểu mẫu. Chương trình đó hoặc chưa được cài đặt trên máy tính của bạn hoặc nó không phản hồi. Để chỉnh sửa đối tượng này, hãy cài đặt Biểu mẫu hoặc đảm bảo rằng mọi hộp thoại trong Biểu mẫu đều bị đóng." [...] Ngoài ra, bạn có thể không thể sử dụng hoặc thay đổi thuộc tính của điều khiển ActiveX trên trang tính hoặc nhận được lỗi khi cố gắng tham chiếu điều khiển ActiveX như một thành viên của trang tính thông qua mã.

Các giải pháp thủ công và bổ sung:

Giải pháp viết kịch bản:

Vì sự cố này có thể ảnh hưởng đến nhiều máy, nên cũng có thể tạo giải pháp tập lệnh để xóa các tệp EXD và chạy tập lệnh như một phần của quy trình đăng nhập bằng chính sách. Tập lệnh bạn cần phải chứa các dòng sau và cần được chạy cho từng USER vì tệp .exd là dành riêng cho USER.

del %temp%\vbe\*.exd
del %temp%\excel8.0\*.exd
del %appdata%\microsoft\forms\*.exd
del %appdata%\microsoft\local\*.exd
del %temp%\word8.0\*.exd
del %temp%\PPT11.0\*.exd

Bước bổ sung:

Nếu các bước trên không giải quyết được sự cố của bạn, bạn có thể kiểm tra một bước khác (xem cảnh báo bên dưới):

  1. Trên máy được cập nhật đầy đủ và sau khi xóa tệp .exd, hãy mở tệp trong Excel với quyền chỉnh sửa.

  2. Mở Visual Basic for Applications> sửa đổi dự án bằng cách thêm nhận xét hoặc chỉnh sửa thuộc một số loại vào bất kỳ mô-đun mã nào> Gỡ lỗi> Biên dịch VBAProject.

  3. Lưu và mở lại tệp. Kiểm tra độ phân giải.

Nếu được giải quyết, hãy cung cấp dự án cập nhật này cho những người dùng khác.

Cảnh báo: Nếu bước này giải quyết được sự cố của bạn, hãy lưu ý rằng sau khi triển khai dự án cập nhật này cho những người dùng khác, những người dùng này cũng sẽ cần phải xóa các bản cập nhật trên hệ thống của họ và cả tệp .exd.


1

Cuối cùng tôi đã tìm thấy câu trả lời này trên Microsoft KB chính thức:

http://support.microsoft.com/kb/3025036/EN-US

Không có thông tin mới nào ở đây ngoài những gì chúng tôi có trong các câu trả lời trước đó, nhưng ít nhất nó thừa nhận rằng Microsoft đã biết về vấn đề này.


0

Tôi biết nhiều câu trả lời đã được đăng cho điều này, nhưng không một câu trả lời nào hoạt động độc lập cho trang web của tôi. Vì vậy, đây là những gì đã làm việc cho tôi:

Bước 1: Gỡ cài đặt các bản cập nhật sau - KB2920789, KB2920790, KB2920792, KB2920793, KB2984942, KB2596927

Bước 2: Ẩn các bản cập nhật này để chúng không được cài đặt vào các lần khởi động lại tiếp theo

Bước 3: Xóa thư mục Excel8.0 khỏi C: \ Users \ <> \ AppData \ Local \ Temp

Bước 4: Khởi động lại workstatiion (Tôi cũng sẽ đảm bảo rằng các KB được đề cập ở trên không vô tình được áp dụng)


0

Tôi muốn cung cấp một câu trả lời phù hợp với tôi (tôi nhận ra rằng tôi có thể là người duy nhất từng có). Tôi đã có trong một macro mà tôi đang gọi bằng dải băng. Nó có mã sau:

colStore = new Collection

Tôi không biết rằng nó tạo ra một lỗi nên tôi đã bối rối và đã thử mọi thứ ở đây. Nút vừa ngừng hoạt động và tôi không thể làm cho nó hoạt động. Khi tôi nhận thấy lỗi và sửa nó thành:

Set colStore = new Collection

Nó bắt đầu hoạt động trở lại. Hoàn toàn lạ nếu bạn hỏi tôi nhưng có lẽ nó giúp ích cho ai đó ngoài kia đang tuyệt vọng như tôi.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.