2017-06-16 60 views
0

我從Web服務調用中轉換了json字符串響應文本。如果我將代碼粘貼到調用Web服務的按鈕所在的工作表上,代碼就可以工作。但是,如果我嘗試將結果放在另一張紙上,我會收到「Error 1004 Application Defined or Object Defined error」將轉換後的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中定義時需要.Range?](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 With End With語句中定義的合格父工作表。它也可以是,

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

通常,'點擊按鈕的代碼'位於私人工作表代碼表上,而不是公共模塊代碼表。在專用工作表代碼表中,所有不合格的範圍和單元格引用默認爲代碼表所屬的工作表。您不能使用默認工作表中的單元格在另一個工作表(例如工作表2)上定義範圍。

+0

我可以更改活動工作表來定義範圍嗎?我不知道上面的答案我粘貼我的轉換JSON結果集到另一個表的問題。感謝您查看這個。 – Dren

+0

你應該知道工作表是什麼目的地。使用With ... End With可讓您將任何工作表設置爲目標,而不會受到懲罰。 – Jeeped

+0

終於明白了,看看你的解決方案。現在就開始工作了。非常感謝Jeeped – Dren