0

私はVBAが初めてです。Microsoft Excel 2007 で、SOAP メッセージを送信して SOAP 応答を処理する VBA コードを作成しました。Soap Response を読み取り、ループ内の Excel セルに値を書き込んでいます。サンプルの SOAP 応答は次のとおりです。

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns2:getMyResponse xmlns:ns2="http://my.samplenamesapce/">
        <return>
            <col1>col1Value</col1>
            <col2>col2Value</col2>
            <col3>3.283E7</col3>
        </return>
        <return>
            <col1>col1Value</col1>
            <col2>col2Value</col2>            
        </return>       
      </ns2:getMyResponse>
   </soap:Body>
</soap:Envelope>

セルに応答を書き込む VBA コードは次のとおりです。

Private Sub getReportBtn_Click()
Dim WS As Worksheet: Set WS = Worksheets("my_report")
Dim request As New MSXML2.XMLHTTP60
Dim url As String
Dim response As New MSXML2.DOMDocument60
Dim requestData As String
    'Clear the Report Sheet
    WS.Range("A2:C65536").ClearContents
    url = Range("url").Value
    'Construct SOAP REQUEST
    request.Open "POST", url, False
    request.setRequestHeader "Content-Type", "text/xml; charset=""UTF-8"""
    request.setRequestHeader "SOAPAction", ""
    'Create SOAP REQUEST BODY
    requestData = xmlBody
    request.setRequestHeader "Content-Length", Len(requestData)
    On Error GoTo err_handler:

    'Send SOAP REQUEST  
    request.send requestData
    'Read SOAP RESPONSE
    response.LoadXML request.responseText

    Dim MyReport As MSXML2.IXMLDOMNode
    Dim MyReportList As MSXML2.IXMLDOMNodeList
    Set MyReportList = response.getElementsByTagName("return")
    Dim i As Integer
    i = 1
    For Each MyReport In MyReportList
        i = i + 1
        WS.Range("col1Range").Cells(i).Value =  MyReport.selectSingleNode("col1").Text
        WS.Range("col2Range").Cells(i).Value =  MyReport.selectSingleNode("col2").Text
        If MyReport.SelectNodes("col3").Length > 0 Then
        WS.Range("col3Range").Cells(i).Value =  MyReport.selectSingleNode("col3").Text
        End If
    Next MyReport
    If i = 1 Then
        MsgBox "No data found for requested query!"
        Sheets("query").Select
        Exit Sub
    End If   
Sheets("my_report").Select
Exit Sub

err_handler:
    MsgBox "Error occurred during submission, please check your settings."
Exit Sub
End Sub

Windows 7 (64 ビット) で My Excel シートを実行すると、同じデータを処理するのに Windows XP (32 ビット) で実行した場合と比べて 2 倍の時間がかかります。両方のマシンの構成と物理的な場所は、オペレーティング システムを除いて同じです。

4

1 に答える 1

0

変数を 32 ビット変数として宣言する必要がある場合があります。変数宣言が遅延の領域であるかどうかを確認するには、コードの最初と最後にタイマーを設定し、WS.range clearContents の前に 3 つ目のタイマーを設定します。私の推測では、64 ビット マシンではメモリ空間の割り当てに 2 倍の時間がかかっています。

于 2013-07-22T19:50:59.810 に答える