2017-03-20 1 views
0

몇 주 전에 완벽하게 작동하는 일부 VBA 코드가 있지만 이제 오류가 발생합니다. Word에서 실행되는 코드는 Excel 파일을 여는 데 사용됩니다. 내가 얻는 특정 오류는 Activate 메서드와 관련이 있습니다.VBA : 활성화 메서드를 찾을 수 없습니다.

Sub Populate() 

Dim eApp As Excel.Application 
Dim eWB As Excel.Workbook 
Dim eSheet As Excel.Worksheet 

On Error Resume Next 
Set eApp = GetObject(, "Excel.Application") 

If Err Then 
    ExcelWasNotRunning = True 
    Set eApp = New Excel.Application 
End If 

'Open Workbook 
WorkbookName = "(Excel file location)" 
eApp.Visible = True 
eApp.Activate 
Set eWB = eApp.Workbooks.Open(WorkbookName) 
eWB.Activate 

(etc.) 

저는 VBA 초보자이므로 위의 글을 쓰는 것이 더 좋습니다. 마지막 줄인 eWB.Activate - 컴파일 오류가 발생합니다. "메서드 또는 데이터 멤버를 찾을 수 없습니다." 다시 말하지만, 지난 달에 일하고 있었고 지금은 작동하지 않습니다. 이 코드가 불법이되는 Office 2016에서 변경된 것이 있습니까?

나는 주위를 둘러 보았고 해결 방법이 있다고 생각하지만, 나중에 참조하기 위해 왜 충돌 하는지를 알고 싶습니다. 감사.

편집 :

+2

는 [참조]가 (http://stackoverflow.com/documentation/excel-vba/777/getting-started-with -excel-vba/6489/a-new-object-library-reference)를 Excel 16.0에 추가 하시겠습니까? 코드에 어떤 문제도 볼 수는 없지만,'.Open'이 그것을 활성화하기 때문에'.Activate '가 필요하지 않습니다. – Slai

+0

Excel 인스턴스의 @AndrewKilmer 활성화는 VBA/Excel이 아닌 운영 체제에 의해 제어되지만 가장 쉬운 방법은 해당 인스턴스에서 열려있는 통합 문서를 활성화하는 것이며 해당 Excel 응용 프로그램 인스턴스가 자동으로 활성화됩니다. – Ibo

+1

일반적으로 통합 문서를 열 때이 통합 문서는 ActiveWorkbook이므로 활성화 할 필요가 없습니다. 또한 WorkbookName을 열기 전에'On Error GoTo 0'을 넣어서 적절한 에러를 볼 수 있습니다. – PatricK

답변

0

거기에서 On Error Resume Next이있는 경우 왜 그 오류가 발생하는지 알 수 없습니다. 게시 한 코드가 누락 되었습니까? 또한 Word의 코드를 방해 할 수있는 Excel 통합 문서 매크로가 활성화되어 있습니까?

IntelliSense로 코딩을 완료하면 이러한 Excel 개체에 대한 후기 바인딩을 시도 할 수도 있습니다. 그냥 내가 (2010 엑셀)이 엑셀 파일 열기 부분을 코딩 할 방법을 설명합니다 :

Option Explicit 

Sub Populate() 

    Dim eApp As Object ' Excel.Application 
    Dim eWB As Object ' Excel.Workbook 
    Dim eSheet As Object ' Excel.Worksheet 
    Dim ExcelWasNotRunning As Boolean 
    Dim WorkbookName As String 

    On Error Resume Next 
    Set eApp = GetObject(, "Excel.Application") 
    If eApp Is Nothing Then Set eApp = CreateObject("Excel.Application") 
    ExcelWasNotRunning = eApp Is Nothing 

    If ExcelWasNotRunning Then Exit Sub 
    'Open Workbook 
    WorkbookName = "C:\Test\Tables.xlsx" 
    eApp.Visible = True 
    'eApp.Activate 
    Set eWB = eApp.Workbooks.Open(WorkbookName) 
    On Error GoTo 0 ' Turns on Debug prompt on Error 
    If Not eWB Is Nothing Then 
     With eWB 
      .Activate 
      ' process stuff 
      .Save 
      .Close 
     End With 
     Set eWB = Nothing 
    End If 
    eApp.Quit 
    Set eApp = Nothing 
End Sub 
+0

원본 코드에 'Dim WorkbookName As String'을 추가하면 효과가있었습니다. 나는이 변화가 왜 움직이게하는지, 왜 그것이 이전에 효과가 있었는지 모르지만 그럼에도 불구하고 이것은 매우 유용합니다. 감사. –

+0

'As xxx'로 변수를 정의하지 않으면,'eApp.Workbooks.Open (WorkbookName)'이 문자열을 기대하는 것처럼 실패하게하는'Variant' 유형입니다. 따라서 * eWB *는 Nothing이므로 ** Nothing.Activate **는 오류입니다. – PatricK

0

Here is the error 나는 단어에서이 작업을 실행 그리고 내가 당신이 가장 가능성이 당신의 컴퓨터에 단어의 새 버전을 설치하기 때문이다 초기 바인딩 문제를 가지고 어떻게 든 생각했다. 당신은 그것을 구글 수 있고 그것을 제거하기 위해 레지스트리를 청소하십시오.

Sub Populate() 

    Dim eApp As Object 
    Dim eWB As Object 
    Dim eSheet As Object 

    On Error Resume Next 

    Set eApp = GetObject(, "Excel.Application") 

    If Err Then 
     ExcelWasNotRunning = True 
     Set eApp = CreateObject("Excel.Application") 
    End If 

    'Open Workbook 
    WorkbookName = "\\grid\sasprod\ci\reports\Quickmarks\Quickmarks Tables A.xlsx" 
    eApp.Visible = True 
    eApp.Activate 
    Set eWB = eApp.Workbooks.Open(WorkbookName) 
    eWB.Activate 

End Sub 
+0

안녕하세요, 실제로 실제 코드에서 괄호를 사용하지 않았습니다. 위의 샘플 코드에 위치와 파일 이름을 어디에 넣었는지를 나타 내기 위해서만 삽입했습니다. 혼란스러워서 죄송합니다. –

+0

@Andrew Kilmer가 다음 파일 위치 문자열을 게시 할 수 있습니까? 내 컴퓨터의 파일 경로 인 문자열로 동일한 코드를 실행했는데 코드에서 오류가 발생하지 않았습니다. – Ibo

+0

@AndrewKilmer Excel 또는 Word에서이 코드를 실행합니까? 또한 오류 메시지 사진을 찍어 도움을 청합니다. – Ibo