将转换后的json字符串粘贴到另一个工作表时的VBA运行时错误1004

时间:2017-06-16 00:56:42

标签: json excel vba excel-vba

我有来自Web服务调用的转换后的json字符串响应文本。如果我将代码粘贴到调用Web服务的按钮所在的同一个工作表上,则代码可以正常工作。但是,如果我尝试将结果放在另一张表上,我会收到“错误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 个答案:

答案 0 :(得分: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)上定义范围。