[excel] Microsoft Excel ActiveX 컨트롤이 비활성화 되었습니까?

ActiveX 확인란을 사용하여 특정 활동을 제어하는 ​​Excel 워크 시트가 있습니다. 그들은 최근에 일했지만 오늘은 오류를주기 시작했습니다. 동료로부터 경고를 받았지만 여전히 내 컴퓨터에서 작동하고있었습니다. 나는 그의 Excel 버전을 내 버전과 비교해 보았고 그의 버전은 더 최신 버전이었습니다. 새로운 Windows 업데이트가 있음을 알았으므로 업데이트했습니다. 보류중인 업데이트를 적용한 후에는 더 이상 내 컴퓨터에서 작동하지 않습니다. 더 이상 ActiveX 확인란을 선택할 수 없으며 디버깅을 시도하는 과정에서 ActiveX 컨트롤을 어떤 워크 시트, 심지어 새 워크 시트에도 더 이상 추가 할 수없는 것 같습니다. “개체를 삽입 할 수 없습니다.”라는 오류 대화 상자가 나타납니다. (ActiveX가 아닌 양식 컨트롤을 계속 추가 할 수 있습니다.) 최근 업데이트 후 다른 사람이이 문제를 겪고 있습니까? 어떤 제안?

감사,

마이크



답변

다른 포럼에서 MS Update 때문이며 사용자 프로필의 Temp 하위 폴더에서 MSForms.exd 파일을 삭제하는 것이 좋은 해결책이라는 것을 알게되었습니다. 예를 들면 :

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

물론이 파일을 삭제하려면 응용 프로그램 (Excel, Word …)을 닫아야합니다.


답변

다음은 Microsoft Excel 지원 팀 블로그에서 찾은 최상의 답변입니다.

일부 사용자의 경우 2014 년 12 월 업데이트를 설치 한 후 Forms Controls (FM20.dll)가 더 이상 예상대로 작동하지 않습니다. 양식 컨트롤을 사용하여 기존 VBA 프로젝트에서 파일을 열거 나 새 워크 시트에 양식 컨트롤을 삽입하거나 이러한 구성 요소를 사용할 수있는 타사 소프트웨어를 실행할 때와 같은 문제가 발생합니다.

다음과 같은 오류가 발생할 수 있습니다.

“개체를 삽입 할 수 없습니다.” “개체 라이브러리가 유효하지 않거나 찾을 수없는 개체 정의에 대한 참조를 포함합니다.”

또한 워크 시트에서 ActiveX 컨트롤의 속성을 사용하거나 변경할 수 없거나 코드를 통해 ActiveX 컨트롤을 워크 시트의 구성원으로 참조하려고 할 때 오류가 발생할 수 있습니다.
업데이트 후 따라야 할 단계 :

이 문제를 해결하려면 클라이언트 컴퓨터에서 캐시 된 버전의 제어 유형 라이브러리 (확장자 파일)를 삭제해야합니다. 이렇게하려면 하드 디스크에서 “.exd”파일 이름 확장명을 가진 파일을 검색하고 찾은 모든 .exd 파일을 삭제해야합니다. 이러한 .exd 파일은 다음에 VBA를 사용할 때 새 컨트롤을 사용할 때 자동으로 다시 만들어집니다. 이러한 Extender 파일은 사용자의 프로필 아래에 있으며 다음과 같은 다른 위치에있을 수도 있습니다.

% appdata % \ Microsoft \ forms

% temp % \ Excel8.0

% temp % \ VBE

스크립팅 솔루션 :

이 문제는 둘 이상의 시스템에 영향을 미칠 수 있으므로 스크립트 솔루션을 만들어 EXD 파일을 삭제하고 정책을 사용하여 로그온 프로세스의 일부로 스크립트를 실행할 수도 있습니다. 필요한 스크립트는 다음 줄을 포함해야하며 .exd 파일은 사용자별로 다르므로 각 사용자에 대해 실행해야합니다.

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

추가 단계 :

위의 단계로 문제가 해결되지 않으면 테스트 할 수있는 다른 단계 (아래 경고 참조) :

  1. 완전히 업데이트 된 컴퓨터에서 .exd 파일을 제거한 후 편집 권한으로 Excel에서 파일을 엽니 다.

    Visual Basic for Applications를 열고 코드 모듈> 디버그> VBAProject 컴파일에 주석을 추가하거나 편집하여 프로젝트를 수정합니다.

    파일을 저장하고 다시 엽니 다. 해상도를 테스트합니다. 해결 된 경우이 업데이트 된 프로젝트를 추가 사용자에게 제공하십시오.

    경고 :이 단계로 문제가 해결되면이 업데이트 된 프로젝트를 다른 사용자에게 배포 한 후 해당 사용자는 시스템에 업데이트를 적용하고 .exd 파일도 제거해야합니다.

이렇게해도 문제가 해결되지 않으면 다른 문제 일 수 있으며 추가 문제 해결이 필요할 수 있습니다.

Microsoft는 현재이 문제를 해결하기 위해 노력하고 있습니다. 블로그에서 업데이트를 확인하십시오.

출처


답변

그것은이었다 KB2553154 . Microsoft는 수정 사항을 릴리스해야합니다. Excel 응용 프로그램 개발자로서 모든 클라이언트 컴퓨터로 이동하여 파일을 삭제할 수는 없습니다. 우리는 Microsoft가 야기한 일에 대해 비난을 받고 있습니다.


답변

저는 Excel 개발자이며이 일이 발생했을 때 분명히 고통을 느꼈습니다. 다행히 Excel이 실행 중일 때도 VBA에서 MSForms.exd 파일의 이름을 변경하여 문제를 해결할 수있는 해결 방법을 찾을 수있었습니다. 스프레드 시트를 배포해야하는 Excel 개발자는 MS 업데이트에 영향을받지 않도록 스프레드 시트에 다음 VBA 코드를 추가 할 수 있습니다.

이 코드를 임의의 모듈에 배치하십시오.

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    

RenameMSFormsFiles 서브 루틴은 C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\및 에서 MSForms.exd 파일의 이름을 바꾸려고합니다.C:\Users\[user.name]\AppData\Local\Temp\VBE\ 폴더 을 MSForms-Copy.exd로 바꾸려고합니다.

그런 다음 Workbook_Open 이벤트의 맨 처음에 RenameMSFormsFiles 서브 루틴을 호출합니다.

Private Sub Workbook_Open()
  RenameMSFormsFiles
End Sub

스프레드 시트가 열리면 MSForms.exd 파일의 이름을 바꾸려고합니다. 분명히 이것은 완벽한 해결책이 아닙니다.

  1. 영향을받는 사용자는 스프레드 시트를 처음 열 때 VBA 코드를 실행할 때 여전히 ActiveX 컨트롤 오류가 발생합니다. VBA 코드를 한 번 실행하고 Excel을 다시 시작한 후에 만 ​​문제가 해결됩니다. 일반적으로 사용자가 손상된 스프레드 시트를 발견 할 때 매우 빠른 반응은 Excel을 닫고 스프레드 시트를 다시 열려는 것입니다. 🙂
  2. MSForms.exd 파일은 MSForms.exd 파일에 문제가없는 경우에도 스프레드 시트를 열 때마다 이름이 변경됩니다. 그러나 스프레드 시트는 잘 작동합니다.

최소한 지금은 Excel 개발자가 Microsoft에서 수정 사항을 릴리스 할 때까지이 해결 방법으로 작업을 계속 배포 할 수 있습니다.

이 솔루션을 여기에 게시했습니다 .


답변

Windows 8.1에서는 Windows 검색을 사용하여 .exd 파일을 찾을 수 없습니다. 반면에 cmd 명령 dir *.exd /S은 내 시스템에서 하나의 파일을 찾았습니다.


답변

KB 이상의 조언은 저에게 효과가 없었습니다. 보안 업데이트를 사용하거나 사용하지 않고 Excel 2007 사용자 한 명이 파일을 저장하면 원래 오류가 반환된다는 사실을 발견했습니다.

파일을 다시 복구하는 가장 빠른 방법은 모든 VBA 코드를 삭제하는 것입니다. 저장. 그런 다음 VBA 코드를 바꿉니다 (복사 / 붙여 넣기). 저장. 이를 시도하기 전에 먼저 .EXD 파일을 삭제합니다. 그렇지 않으면 열 때 오류가 발생하기 때문입니다.

제 경우에는 여러 위치에서 Excel 파일의 모든 사용자를 업그레이드 / 업데이트 할 수 없습니다. 일부 사용자가 Excel 파일을 저장 한 후 문제가 다시 발생하기 때문에 ActiveX 컨트롤을 다른 것으로 바꿔야합니다.


답변

최종 사용자를위한 단순화 된 지침. 다음을 자유롭게 복사 / 붙여 넣기하십시오.

문제가 발생했을 때 문제를 해결하는 방법은 다음과 같습니다.

  1. 모든 Office 프로그램과 파일을 닫습니다.
  2. Windows 탐색기를 열고 주소 표시 줄에 % TEMP %를 입력 한 다음 Enter 키를 누릅니다. 시스템 임시 폴더로 이동합니다.
  3. 다음 폴더를 찾아 삭제합니다. Excel8.0, VBE, Word8.0
  4. 이제 파일을 다시 사용해보십시오. 문제가 없어야합니다.

이 수정 사항이 작동하려면 문제가 발생할 때까지 기다려야 할 수 있습니다. 시스템에 Windows 업데이트가 설치되기 전에 미리 적용하면 도움이되지 않습니다.