2017-06-16 4 views
0

Webサービスコールから変換されたjson文字列応答テキストがあります。コードは、Webサービスを呼び出すボタンと同じシートに貼り付けると機能します。しかし、別のシートに結果を置こうとすると "Error 1004 Application DefinedまたはObject Definedエラー"が表示されます変換されたjson文字列を別のシートに貼り付けると、VBAランタイムエラー1004が発生する

Excel上のクリックボタンのコードは次のとおりです。

Private Sub webcall_Click() 
    Dim MyRequest As Object 
    Dim JSON As Dictionary 
    Dim Header As Range 
    Dim Env As String 

    Logix = Sheets("Sheet1").Cells(2, "G").Value 

    If Env = "" Then 
     URL = "https://defaultURL/sqlquery.aspx" 
     MsgBox (URL) 
    Else 
     URL = "https://anotherURL/sqlquery.aspx" 
     MsgBox (URL) 
    End If 

    Set MyRequest = CreateObject("WinHttp.WinHttpRequest.5.1") 
    MyRequest.Open "POST", URL 
    MyRequest.Send 
    Set JSON = JsonConverter.ParseJson(MyRequest.responseText) 

    Dim Values As Variant 
    ReDim Values(JSON("chargebackdept table").Count, 3) 

    Dim Value As Dictionary 
    Dim i As Long 

    i = 0 
    For Each Value In JSON("chargebackdept table") 
     Values(i, 0) = Value("chargebackcategory") 
     Values(i, 1) = Value("chargebackdeptid") 
     Values(i, 2) = Value("name") 
    i = i + 1 
    Next Value 

    Sheets("Sheet1").Range(Cells(1, "B"), Cells(JSON("chargebackdept table").Count, "D")) = Values 
    Sheets("Sheet1").Range("B1").Insert Shift:=xlDown 
    Sheets("Sheet1").Range("C1").Insert Shift:=xlDown 
    Sheets("Sheet1").Range("D1").Insert Shift:=xlDown 
    Set Header = Sheets("Sheet1").Range("B1") 
    Header.Value = "ChargeBack_Category" 
    Set Header = Sheets("Sheet1").Range("C1") 
    Header.Value = "ChargeBack_ID" 
    Set Header = Sheets("Sheet1").Range("D1") 
    Header.Value = "ChargeBack_Name" 
    MsgBox ("Done loading chargeback table") 
End Sub 

私の問題はラインです。

Sheets("Sheet1").Range(Cells(1, "B"), Cells(JSON("chargebackdept table").Count, "D")) = Values 

以下のように別のシートに変更するとエラーになります。

Sheets("Sheet2").Range(Cells(1, "B"), Cells(JSON("chargebackdept table").Count, "D")) = Values 
+1

に関連しています。 .Cells?](https://stackoverflow.com/questions/36368220/is-the-in-range-necessary-when-defined-by-cells)で定義されている場合は、必要な範囲で指定します。 – Jeeped

答えて

2

範囲を定義するセルの親ワークシートを修飾します。

with workSheets("Sheet1") 
    .Range(.Cells(1, "B"), .Cells(JSON("chargebackdept table").Count, "D")) = Values 
end with 

.CellsないCells.は、With ... End Withステートメントで定義されている適格な親ワークシートを提供します。

workSheets("Sheet1").Range(workSheets("Sheet1").Cells(1, "B"), workSheets("Sheet1").Cells(JSON("chargebackdept table").Count, "D")) = Values 

通常、「クリックボタンのコード」は、公開ワークシートのコードシートではなく、プライベートワークシートのコードシートにあります。プライベートワークシートのコードシートでは、すべての非修飾範囲およびセル参照は、コードシートが属するワークシートをデフォルトにしています。デフォルトのワークシートのセルで別のワークシート(たとえばsheet2)に範囲を定義することはできません。

+0

アクティブワークシートを変更して範囲を定義することはできますか?私は、上記の答えが私の変換されたjsonの結果セットを別のシートに貼り付けるという私の問題であるとは確信していません。これを見ていただきありがとうございます。 – Dren

+0

目的地のワークシートを知っておく必要があります。 With ... End Withを使用すると、ワークシートをペナルティなしで宛先として設定できます。 – Jeeped

+0

最後に、あなたのソリューションの2番目の外観で理解されています。それは今働いている。多くのありがとうJeeped – Dren

関連する問題