Czy formanty Microsoft Excel ActiveX są wyłączone?

113

Mam kilka arkuszy programu Excel, które używają pól wyboru ActiveX do kontrolowania określonych działań. Pracowali niedawno, ale dziś zaczęli dawać błędy. Zaalarmował mnie o tym kolega, ale nadal działało na moim komputerze. Sprawdziłem jego wersję programu Excel z moją i jego była nowsza. Zauważyłem, że pojawiły się nowe aktualizacje systemu Windows, więc zrobiłem aktualizację. Po zastosowaniu oczekujących aktualizacji nie działa już na moim komputerze. Nie mogę już zaznaczać pól wyboru ActiveX, a podczas próby debugowania wydaje się, że nie mogę już nawet dodać formantu ActiveX do żadnego arkusza roboczego, nawet nowego arkusza. Pojawia się okno dialogowe z komunikatem „Nie można wstawić obiektu”. (Nadal mogę dodawać kontrolki formularzy, ale nie ActiveX). Czy ktoś jeszcze doświadcza tego po ostatniej aktualizacji? Jakieś sugestie?

Dzięki,

Mikrofon

Mike Pedersen
źródło
jaka to była kontrola? czy masz na myśli WSZYSTKIE activeX?
Peege
Wydaje się, że trzech moich kolegów też ma ten problem. Wydaje mi się, że ich arkusze kalkulacyjne używają formantów ActiveX - ComboBoxes i Buttons. Jeden z nich miał swój komputer i dlatego nie otrzymał aktualizacji. Kiedy go odzyskał, z powodzeniem przeprowadził kontrolę. To znaczy, dopóki jego komputer nie zostanie automatycznie zaktualizowany. Teraz tak nie jest. Nie możemy również dodawać formantów ActiveX do ich arkuszy.
Mitchell Kaplan,
5
Ja również doświadczam tego problemu, podobnie jak wszyscy użytkownicy w mojej firmie. Jak firma MS mogłaby wydać aktualizację, która łamie formanty ActiveX w programie Excel? To jest szalone.
harryg,
3
@ vba4all: nie, to jest pytanie programistyczne i należy tutaj.
Harry Johnston,
2
@ vba4all: Formanty ActiveX to narzędzie programistyczne - prawda? Do czego jeszcze byś ich użył? Byłoby inaczej, gdyby OP pytał na przykład o konkretny produkt innej firmy (który używa VBA), który przestał działać. Ale w tym przypadku wydaje się, że problem dotyczy jego własnego kodu?
Harry Johnston,

Odpowiedzi:

159

Z innych forów dowiedziałem się, że jest to spowodowane aktualizacją MS Update i dobrym rozwiązaniem jest po prostu usunięcie pliku MSForms.exd z dowolnego podfolderu Temp w profilu użytkownika. Na przykład:

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

Oczywiście aplikacja (Excel, Word ...) musi zostać zamknięta, aby usunąć ten plik.

John W.
źródło
1
Miałem niezaktualizowany komputer. Otworzyłem Excela i mogłem dodać przycisk ActiveX. Szukałem C: \ Users [nazwa.użytkownika] \ AppData \ Local \ Temp \ Excel8.0 \ MSForms.exd, ale nie było folderu Excel8.0. Następnie uruchomiłem aktualizację systemu Windows. Ponownie próbowałem dodać przycisk ActiveX do mojego arkusza kalkulacyjnego i nie mogłem. Zauważyłem również, że mam teraz plik Excel8.0 \ MSForms.exd. Usunąłem go i bez ponownego uruchamiania ponownie otworzyłem Excel i mogłem teraz dodać przycisk ActiveX. Dzięki!
Mitchell Kaplan,
2
Dziękuję Ci!! Ten proces rozwiązał problem na moim komputerze. Czuję dla programistów, którzy mają duże publiczne wydania, że ​​to się psuje ... Mam nadzieję, że MS wyda poprawkę.
Mike Pedersen,
1
To nie zadziałało dla mnie. Przywracam system z powrotem do 12/7/14 na jednym z naszych komputerów, aby sprawdzić, czy to naprawi. Próbowałem też usunąć przycisk i zamienić go na odpowiedź poniżej, ale otrzymałem wyskakujące okienko „Nie można wstawić obiektu” lub coś w tym rodzaju.
alpinista
1
Dla użytkowników systemu Windows XP Podfolder Temp można znaleźć tutaj: C: \ Documents and Settings \ [nazwa.użytkownika] \ Ustawienia lokalne \ Temp \ Excel8.0 \ MSForms.exd
bjtilley
2
Po usunięciu powyższych plików nie działało to dla mnie, ale potem znalazłem te pliki w folderze C: / Windows / Temp i usunąłem je. Wtedy udało mi się rozwiązać ten problem.
QV1,
35

Oto najlepsza odpowiedź, jaką znalazłem na blogu zespołu pomocy technicznej programu Microsoft Excel

W przypadku niektórych użytkowników formanty formularzy (FM20.dll) nie działają zgodnie z oczekiwaniami po zainstalowaniu aktualizacji z grudnia 2014 r. Czasami występują problemy, na przykład podczas otwierania plików z istniejącymi projektami VBA za pomocą formantów formularzy, próby wstawienia formantu formularzy do nowego arkusza lub uruchamiania oprogramowania innych firm, które może korzystać z tych składników.

Możesz otrzymać błędy, takie jak:

„Nie można wstawić obiektu” „Biblioteka obiektów jest nieprawidłowa lub zawiera odniesienia do definicji obiektów, których nie można znaleźć”

Ponadto możesz nie być w stanie użyć lub zmienić właściwości formantu ActiveX w arkuszu lub otrzymać błąd podczas próby odwołania się do formantu ActiveX jako członka arkusza za pośrednictwem kodu. Kroki, które należy wykonać po aktualizacji:

Aby rozwiązać ten problem, należy usunąć buforowane wersje bibliotek typów kontrolnych (pliki ekstendera) na komputerze klienckim. W tym celu należy przeszukać dysk twardy w poszukiwaniu plików z rozszerzeniem nazwy „.exd” i usunąć wszystkie znalezione pliki .exd. Te pliki .exd zostaną ponownie utworzone automatycznie, gdy użyjesz nowych formantów następnym razem, gdy użyjesz VBA. Te pliki rozszerzeń będą znajdować się w profilu użytkownika i mogą również znajdować się w innych lokalizacjach, takich jak:

% appdata% \ Microsoft \ forms

% temp% \ Excel8.0

% temp% \ VBE

Rozwiązanie skryptowe:

Ponieważ ten problem może dotyczyć więcej niż jednego komputera, można również utworzyć rozwiązanie skryptowe w celu usunięcia plików EXD i uruchomienia skryptu jako części procesu logowania przy użyciu zasad. Skrypt, którego potrzebujesz, powinien zawierać następujące wiersze i musiałby być uruchamiany dla każdego UŻYTKOWNIKA, ponieważ pliki .exd są specyficzne dla UŻYTKOWNIKA.

del% temp% \ vbe \ *. exd

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

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

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

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

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

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

Dodatkowy krok:

Jeśli powyższe kroki nie rozwiążą problemu, kolejny krok, który można przetestować (patrz ostrzeżenie poniżej):

  1. Na w pełni zaktualizowanym komputerze i po usunięciu plików .exd otwórz plik w programie Excel z uprawnieniami do edycji.

    Otwórz Visual Basic for Applications> zmodyfikuj projekt, dodając komentarz lub edytuj jakiś rodzaj do dowolnego modułu kodu> Debuguj> Skompiluj VBAProject.

    Zapisz i ponownie otwórz plik. Sprawdź rozdzielczość. Jeśli problem zostanie rozwiązany, przekaż ten zaktualizowany projekt dodatkowym użytkownikom.

    Ostrzeżenie: jeśli ten krok rozwiąże problem, pamiętaj, że po wdrożeniu tego zaktualizowanego projektu dla innych użytkowników, ci użytkownicy będą również musieli mieć aktualizacje zastosowane w swoich systemach, a także usunąć pliki .exd.

Jeśli to nie rozwiąże problemu, może to być inny problem i może być konieczne dalsze rozwiązanie problemu.

Firma Microsoft obecnie pracuje nad tym problemem. Obserwuj blog, aby uzyskać aktualizacje.

Źródło

Jan Moritz
źródło
3
sprawdź połączone źródło, teraz zaktualizowało rozwiązanie Scripting
peterson
Na moim komputerze% appdata% jest zdefiniowany jako „C: \ Users \ <current user> \ AppData \ Roaming \”, więc nie ma katalogu „% appdata% \ microsoft \ local \”. Ponadto „% appdata% \ Roaming \ microsoft \ form \” wydaje się być zbędny, ponieważ „C: \ Users \ <bieżący użytkownik> \ AppData \ Roaming \ Roaming \ microsoft \ forms \” i znowu taki katalog nie istnieje na moim komputerze.
pstraton
15

To był KB2553154 . Microsoft musi opublikować poprawkę. Jako twórca aplikacji Excel nie możemy korzystać z komputerów wszystkich naszych klientów i usuwać z nich plików. Jesteśmy obwiniani za coś, co spowodował Microsoft.

Ron R.
źródło
1
Również KB2596927 i KB2726958, w ​​zależności od używanej wersji pakietu Office.
Harry Johnston,
13

Jestem programistą Excela i zdecydowanie poczułem ból, kiedy to się stało. Na szczęście udało mi się znaleźć obejście tego problemu, zmieniając nazwy plików MSForms.exd w VBA, nawet gdy jest uruchomiony program Excel, co również może rozwiązać problem. Programiści programu Excel, którzy muszą rozpowszechniać swoje arkusze kalkulacyjne, mogą dodać następujący kod VBA do swoich arkuszy kalkulacyjnych, aby uczynić je odpornymi na aktualizację MS.

Umieść ten kod w dowolnym module.

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    

Procedura RenameMSFormsFiles próbuje zmienić nazwy plików MSForms.exd w folderach C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\i C:\Users\[user.name]\AppData\Local\Temp\VBE\na MSForms - Copy.exd.

Następnie wywołaj podprogram RenameMSFormsFiles na samym początku zdarzenia Workbook_Open.

Private Sub Workbook_Open() 
  RenameMSFormsFiles  
End Sub

Arkusz kalkulacyjny spróbuje zmienić nazwy plików MSForms.exd po otwarciu. Oczywiście nie jest to idealne rozwiązanie:

  1. U użytkownika, którego dotyczy problem, nadal będą występować błędy formantu ActiveX podczas uruchamiania kodu VBA przy pierwszym otwarciu arkusza kalkulacyjnego. Dopiero po jednokrotnym wykonaniu kodu VBA i ponownym uruchomieniu programu Excel problem został rozwiązany. Zwykle, gdy użytkownik napotyka uszkodzony arkusz kalkulacyjny, odruchową reakcją jest zamknięcie programu Excel i ponowna próba otwarcia arkusza kalkulacyjnego. :)
  2. Nazwy plików MSForms.exd są zmieniane przy każdym otwarciu arkusza kalkulacyjnego, nawet jeśli nie ma problemu z plikami MSForms.exd. Ale arkusz kalkulacyjny będzie działał dobrze.

Przynajmniej na razie programiści programu Excel mogą nadal rozpowszechniać swoją pracę, stosując to obejście, dopóki firma Microsoft nie wyda poprawki.

Opublikowałem to rozwiązanie tutaj .

Yi Hu
źródło
Dzięki Yi. U mnie to zadziałało, ale musiałem zrestartować mojego Excela 2010 (może to wiązać się z tym, że w tym samym czasie pracowałem z edytorem VBA?)
J. Chomel
5

W systemie Windows 8.1 nie mogłem znaleźć żadnych plików .exd za pomocą wyszukiwania w systemie Windows. Z drugiej strony polecenie cmd dir *.exd /Sznalazło jeden plik w moim systemie.

Marc Thibault
źródło
3

Porady w KB i nowszych nie działały dla mnie. Odkryłem, że jeśli jeden użytkownik programu Excel 2007 (z aktualizacją zabezpieczeń lub bez niej; nie jestem pewien, jakie dokładnie okoliczności to powodują) zapisuje plik, powraca pierwotny błąd.

Odkryłem, że najszybszym sposobem ponownej naprawy pliku jest usunięcie całego kodu VBA. Zapisać. Następnie zamień kod VBA (kopiuj / wklej). Zapisać. Zanim to zrobię, najpierw usuwam pliki .EXD, ponieważ w przeciwnym razie pojawia się błąd podczas otwierania.

W moim przypadku nie mogę uaktualnić / zaktualizować wszystkich użytkowników mojego pliku Excel w różnych lokalizacjach. Ponieważ problem powraca po zapisaniu pliku Excela przez niektórych użytkowników, będę musiał zastąpić formant ActiveX czymś innym.

pghcpa
źródło
2
Żadna z sugestii nie zadziałała dla mnie, z wyjątkiem zapisania pliku jako XLSX (usunięcie całego kodu), a następnie ponownego wklejenia tak, jak to zrobiłeś - ponownego zapisania jako XLSM. Ogromny, MASYWNY ból w dupie Microsoft. Ponowna instalacja pakietu Office też mi nie
pomogła,
2

Uproszczone instrukcje dla użytkowników końcowych. Możesz skopiować / wkleić następujące elementy.

Oto jak rozwiązać problem, gdy się pojawi:

  1. Zamknij wszystkie programy i pliki pakietu Office.
  2. Otwórz Eksploratora Windows i wpisz% TEMP% w pasku adresu, a następnie naciśnij Enter. Spowoduje to przejście do tymczasowego folderu systemowego.
  3. Zlokalizuj i usuń następujące foldery: Excel 8.0, VBE, Word 8.0
  4. Teraz spróbuj ponownie użyć pliku, nie powinno to mieć żadnych problemów.

Aby ta poprawka zadziałała, może być konieczne poczekanie, aż wystąpi problem. Zastosowanie go przedwcześnie (przed zainstalowaniem usługi Windows Update w systemie) nie pomoże.

wino z gruszek
źródło
2

Najlepszym źródłem informacji i aktualizacji dotyczących tego problemu, jakie udało mi się znaleźć, są blogi TechNet »Blog zespołu pomocy technicznej programu Microsoft Excel (jak wspomniano):

Formanty formularzy przestają działać po aktualizacjach z grudnia 2014 r. (Zaktualizowane 10 marca 2015 r.)

W marcu 2015 r. Oprócz automatycznej naprawy i instrukcji ręcznych wydana została poprawka , która jest również dostępna w witrynie Windows Update.

Najnowsza aktualizacja i poprawka firmy Microsoft: błąd „Nie można wstawić obiektu” 3025036 w niestandardowym rozwiązaniu pakietu Office ActiveX po zainstalowaniu aktualizacji zabezpieczeń MS14-082

STATUS: Aktualizacja 10 marca 2015:

Poprawki dotyczące tego problemu zostały wydane w aktualizacjach z marca 2015 r. Dla pakietu Office 2007, 2010 i 2013.

Ogólne informacje o problemie:

W przypadku niektórych użytkowników formanty formularzy (FM20.dll) nie działają zgodnie z oczekiwaniami po zainstalowaniu aktualizacji zabezpieczeń MS14-082 pakietu Microsoft Office z grudnia 2014 r. Problemy pojawiają się na przykład podczas otwierania plików z istniejącymi projektami VBA przy użyciu formantów formularzy. wstawić formant formularzy do nowego arkusza lub uruchomić oprogramowanie innej firmy, które może korzystać z tych składników.

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

Mogą pojawić się błędy, takie jak: „Nie można wstawić obiektu”; „Biblioteka obiektów jest nieprawidłowa lub zawiera odniesienia do definicji obiektów, których nie można znaleźć”; „Program użyty do utworzenia tego obiektu to Formularze. Ten program nie jest zainstalowany na Twoim komputerze lub nie odpowiada. Aby edytować ten obiekt, zainstaluj Formularze lub upewnij się, że wszystkie okna dialogowe w Formularzach są zamknięte”. [...] Ponadto możesz nie być w stanie użyć lub zmienić właściwości formantu ActiveX w arkuszu lub otrzymać błąd podczas próby odwołania się do formantu ActiveX jako członka arkusza za pośrednictwem kodu.

Rozwiązania ręczne i dodatkowe:

Rozwiązanie skryptowe:

Ponieważ ten problem może dotyczyć więcej niż jednego komputera, można również utworzyć rozwiązanie skryptowe w celu usunięcia plików EXD i uruchomienia skryptu jako części procesu logowania przy użyciu zasad. Skrypt, którego potrzebujesz, powinien zawierać następujące wiersze i musiałby być uruchamiany dla każdego UŻYTKOWNIKA, ponieważ pliki .exd są specyficzne dla UŻYTKOWNIKA.

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

Dodatkowy krok:

Jeśli powyższe kroki nie rozwiążą problemu, kolejny krok, który można przetestować (patrz ostrzeżenie poniżej):

  1. Na w pełni zaktualizowanym komputerze i po usunięciu plików .exd otwórz plik w programie Excel z uprawnieniami do edycji.

  2. Otwórz Visual Basic for Applications> zmodyfikuj projekt, dodając komentarz lub edytuj jakiś rodzaj do dowolnego modułu kodu> Debuguj> Skompiluj VBAProject.

  3. Zapisz i ponownie otwórz plik. Sprawdź rozdzielczość.

Jeśli problem zostanie rozwiązany, przekaż ten zaktualizowany projekt dodatkowym użytkownikom.

Ostrzeżenie: jeśli ten krok rozwiąże problem, pamiętaj, że po wdrożeniu tego zaktualizowanego projektu dla innych użytkowników, ci użytkownicy będą również musieli mieć aktualizacje zastosowane w swoich systemach, a także usunąć pliki .exd.

dePatinkin
źródło
1

W końcu znalazłem tę odpowiedź w oficjalnej bazie wiedzy Microsoft:

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

Nie ma tu żadnych nowych informacji niż te, które mamy w poprzednich odpowiedziach, ale przynajmniej potwierdza, że ​​Microsoft jest świadomy problemu.

Mike Pedersen
źródło
0

Wiem, że opublikowano już wiele odpowiedzi na ten temat, ale żadna z nich nie działała niezależnie w mojej witrynie. Oto, co zadziałało dla mnie:

Krok 1: Odinstaluj następujące aktualizacje - KB2920789, KB2920790, KB2920792, KB2920793, KB2984942, KB2596927

Krok 2: Ukryj te aktualizacje, aby nie zostały zainstalowane przy kolejnych ponownych uruchomieniach

Krok 3: Usuń folder Excel8.0 z C: \ Users \ <> \ AppData \ Local \ Temp

Krok 4: Uruchom ponownie stację roboczą (upewniłbym się również, że wyżej wymienione KB nie zostały przypadkowo zastosowane)

chaltahai
źródło
0

Chcę udzielić odpowiedzi, która zadziałała jako jedyna dla mnie (zdaję sobie sprawę, że mogę być jedyną kiedykolwiek). Miałem w jednym makrze, które wywoływałem za pomocą wstążki. Miał następujący kod:

colStore = new Collection

Nie byłem świadomy, że generuje błąd, więc byłem zaskoczony i próbowałem wszystkiego tutaj. Przycisk po prostu przestał działać i nie mogłem go uruchomić. Kiedy zauważyłem błąd i poprawiłem go na:

Set colStore = new Collection

Znowu zaczęło działać. Absolutnie dziwne, jeśli o mnie chodzi, ale może pomaga to komuś, kto był tak zdesperowany jak ja.

Fałszywy
źródło