Выбор диапазона фиксации - PullRequest
1 голос
/ 29 января 2020

Я получаю ошибку Run-time error '1004': Application-defined or object-defined error на Range("A1").Select. Я просмотрел несколько других подобных вопросов, но в настоящее время я не могу найти решение. Я бы предпочел изменить диапазон «Выбрать» на затемненный диапазон, но поскольку я не понимаю, как код выбирает лист для выбора, я не уверен, как определить диапазон.

Вот код :

Sub ServiceNowRestAPIQuery()

    ' Replace with your Service Now Inctance URL
    InstanceURL = "https://dev#####.service-now.com"
    ' Replace with your Authorization code
    AuthorizationCode = "Basic ########################"
    ' Add more tables as comma seperated with no spaces
    TableNames = ("incident,problem")

    Dim ws As Worksheet
    Dim objHTTP As New WinHttp.WinHttpRequest
    Dim columns As String
    Dim Header As Boolean
    Dim jsonString As String
    Dim Resp As New MSXML2.DOMDocument60
    Dim Result As IXMLDOMNode
    Dim ColumnsArray As Variant

    TablesArray = Split(TableNames, ",")

    For x = LBound(TablesArray) To UBound(TablesArray)

        'Table Choices
        Select Case TablesArray(x)

        Case "incident"
            Set ws = ThisWorkbook.Sheets("incidents")
            columns = "number,company,close_notes,impact,closed_at,assignment_group"
            ColumnsArray = Split(columns, ",")
            OtherSysParam = "&sysparm_limit=10"
            SysQuery = "&sysparm_query=active%3Dtrue"

        Case "problem"
            'Sheet name
            Set ws = ThisWorkbook.Sheets("problem")
            'Columns to Query
            columns = "number,short_description,state"
            ColumnsArray = Split(columns, ",")
            'Query filter Parameters
            OtherSysParam = "&sysparm_query=state=1"
            'Other Query Parameters
            SysQuery = ""
        End Select

        Url = InstanceURL & "/api/now/table/"
        Table = TablesArray(x) & "?"
        sysParam = "sysparm_display_value=true&sysparm_exclude_reference_link=true" & OtherSysParam & SysQuery & "&sysparm_fields=" & columns
        Url = Url & Table & sysParam
        objHTTP.Open "get", Url, False
        objHTTP.SetRequestHeader "Accept", "application/xml"
        objHTTP.SetRequestHeader "Content-Type", "application/xml"

        ' Authorization Code
        objHTTP.SetRequestHeader "Authorization", AuthorizationCode
        objHTTP.Send                             '("{" & Chr(34) & "short_description" & Chr(34) & ":" & Chr(34) & "Test API2" & Chr(34) & "}")

        Debug.Print objHTTP.Status
        Debug.Print objHTTP.ResponseText
        ws.Select
        Header = False
        i = 1
        Range("A1").Select
        Cells.Clear

        Resp.LoadXML objHTTP.ResponseText
        For Each Result In Resp.getElementsByTagName("result")
            For n = LBound(ColumnsArray) To UBound(ColumnsArray)
                If Header = False Then
                    ActiveCell.Offset(0, n).Value = ColumnsArray(n)
                End If
                ActiveCell.Offset(i, n).Value = Result.SelectSingleNode(ColumnsArray(n)).Text
            Next n
            i = i + 1
            Header = True
        Next Result
        'MsgBox Time
    Next x
End Sub

Этот код проверяет Sheets("incident") и Sheets("problems"), но я теряюсь, когда пытаюсь выяснить, как это , выбирая, какой лист выбрать для Range("A1").Select код и почему возвращается ошибка 1004 . Пожалуйста, помогите, большое спасибо! :)

Кстати, этот код предназначен для интеграции книги Excel с экземпляром ServiceNow через веб-службы REST. Дополнительную информацию и источник кода можно найти на веб-странице ServiceNowElite ServiceNow в Microsoft Excel .

1 Ответ

1 голос
/ 29 января 2020

Вам не нужно Select здесь:

ws.Select
...
Range("A1").Select
Cells.Clear

может быть просто

ws.UsedRange.Clear
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...