2016-08-09 2 views
1

Excel VBA를 통해 IBM Cognos에서 파일을 다운로드하려고합니다. 스크립트가 실행되지만 열리지 않는 9KB Excel 파일 만받습니다. 이 작업을 어떻게 수행합니까? 인증 헤더를 통해 암호를 전송VBA를 통해 Excel 파일 다운로드

Sub ado_stream() 
'add a reference to Microsoft XML v6 and MS ActiveX Data Objects 
'via Tools/References 
'This assumes the workbook is saved already, and that you want the file in the same folder 
Dim fileStream As ADODB.Stream 
Dim xmlHTTP As MSXML2.xmlHTTP 
Dim strURL As String 

strURL = "http://foo.bar" 

Set xmlHTTP = New MSXML2.xmlHTTP 
xmlHTTP.Open "GET", strURL, False, "username", "password" 
xmlHTTP.Send 

If xmlHTTP.status <> 200 Then 
    MsgBox "File not found" 
    GoTo exitsub 
End If 

Set fileStream = New ADODB.Stream 
With fileStream 
    .Open 
    .Type = adTypeBinary 
    .Write xmlHTTP.responseBody 
    .Position = 0 
    .SaveToFile "C:\Users\myname\Downloads\Test.xlsx" 
    .Close 
End With 

exitsub: 
Set fileStream = Nothing 
Set xmlHTTP = Nothing 

End Sub 
+0

시도는'당신이 스트림을 열기 전에, 당신은 아마 xmlHTTP.ReadyState = 4''를 확인하기 위해 루프를 사용한다 – cyboashu

+0

을 xmlHTTP.responseText' 문서가 완전히로드되었는지 확인하려면 – dbmitch

+0

@cyboashu, .responseBody를 .responseText yeilds로 변경하십시오. "인수가 잘못되었습니다 ..."오류 메시지. – Mateyobi

답변

1

시도 :

다음은 내 코드입니다. 그게 효과가 있는지보십시오. `DoEvents`으로 - - 심지어 짧은`Sleep` 호출 이후

Set xmlHTTP = New MSXML2.xmlHTTP 
    xmlHTTP.Open "GET", strURL, False 
    xmlHTTP.setRequestHeader "Authorization", "Basic " & EncodeBase64 
    xmlHTTP.Send 

'EncodeBase Function. Put your actual user name and password here. 
Private Function EncodeBase64() As String 
    Dim arrData() As Byte 
    arrData = StrConv("<<username>>" & ":" & "<<password>>", vbFromUnicode) 

    Set objXML = New MSXML2.DOMDocument 
    Set objNode = objXML.createElement("b64") 

    objNode.DataType = "bin.base64" 
    objNode.nodeTypedValue = arrData 
    EncodeBase64 = objNode.text 

    Set objNode = Nothing 
    Set objXML = Nothing 
End Function 
+0

'StrConv ("<"& ":"& "<", vbFromUnicode)'yeilds 오류 메시지 ''??????????? ' bin.base64 데이터 유형으로. 어떻게해야합니까? – Mateyobi

+0

<, 웹 사이트에 로그인 할 때 사용하는 사용자 이름을 입력하십시오. 비밀번호도 동일합니다. – cyboashu

+0

나는 시도했고 나는 << >>없이 시도했다. 같은 오류. 참조를 추가해야합니까? – Mateyobi

관련 문제