2013-05-23 3 views
0

xlsm 템플릿 파일을 사용자에게 다운로드 중입니다. 다운로드 후 문서가 열리면 'ThisWorkbook.Sheets ("DataSheet") 줄의 "Worksheet 클래스의 Activate 속성을 가져올 수 없습니다."오류가 발생합니다.'inconsistently '를 활성화하십시오. 내가 뭘 잘못하고 있는지 이해할 수 없다. 내 코드는Excel VBA : <워크 시트 클래스의 Activate 속성을 가져올 수 없습니다.>

,

Sub GetData(hostName As String, id As String) 

    'Construct the Complete URL to get the saved view data 
    Dim URL As String 
    URL = hostName + "/Controller/Action?param=" + id 

    ThisWorkbook.Sheets("DataSheet").Activate 
    ThisWorkbook.Sheets("DataSheet").Cells.ClearContents 

    With ActiveSheet.QueryTables.Add(_ 
     Connection:="URL;" + URL, _ 
     Destination:=Range("a1")) _ 
     .BackgroundQuery = True 
     .TablesOnlyFromHTML = True 
     .Refresh BackgroundQuery:=False 
     .SaveData = True 
    End With 
End Sub 

어떤 아이디어가?

업데이트 : 다운로드 후 처음 열 때만이 오류가 발생합니다 (내 앱에서 매크로 다운로드 문서 - XLSM에서 사용자에게 다운로드 중임). 내가 문서 다시 열기를 폐쇄되면, 그것은 작동하고 잘 :(

+0

은 * (숨겨지지) * 눈에 보이는 데이터 시트 –

+1

은 데이터 시트를 활성화하지 않습니다 워크 시트입니다 차이점을 만드시겠습니까? With 문의 첫 번째 줄을 ** Sheets ("DataSheet")로 바꿀 수 없습니까? QueryTables.Add (_ ** 코드에서 먼저 활성화해야하는 이유가 없습니다 – sous2817

+0

** Activate **는 (cell.activate, workbook.activate, range.activate와 같은) 메소드이고 AFAIK ** Activate **는 전혀 속성이 아닙니다. –

답변

1

은 다음과 같이 코드를 변경해보십시오 :

Sub GetData(hostName As String, id As String) 

    'Construct the Complete URL to get the saved view data 
    Dim URL As String 
    URL = hostName + "/Controller/Action?param=" + id 

    ThisWorkbook.Sheets("DataSheet").Cells.ClearContents ' leaves formatting 

    With Sheets("DataSheet").QueryTables.Add(_ 
     Connection:="URL;" + URL, _ 
     Destination:=Range("a1")) _ 
     .BackgroundQuery = True 
     .TablesOnlyFromHTML = True 
     .Refresh BackgroundQuery:=False 
     .SaveData = True 
    End With 
End Sub 
+0

감사합니다. 거의 비슷한 종류의 변화와 잘 작동했습니다. 그러나 문제는 다른 시트가 활성화되어있을 때 사용자가 데이터를 새로 고친 다음 시트에서 데이터가 새로 고쳐지지만 활성화되지 않는 경우입니다. VBA를 사용하여 특정 시트를 활성화하는 방법은 무엇입니까? – Santhosh

+1

@Santhosh : Excel에서 액션의 70 %에 해당하는 코드를 얻는 가장 좋은 방법은 매크로 레코더를 켠 다음 액션을 수행하고 코드를 살펴 보는 것입니다. 귀하의 질문에 답하기 위해 귀하의 * 원래 코드 *와 비슷하지만, ** 워크 시트 **에서 ** 선택 ** 방법을 사용하십시오 (** 시트는 * 차트 시트 *가 아니면 ** 활성화 **해야 함) –

관련 문제