Записанный макрос в Excel завершается с ошибкой при запуске

#vba #excel #excel-2007

#vba #excel #excel-2007

Вопрос:

 Sub Macro3()
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://..." _
        , Destination:=Range("Sheet6!$G$23"))

        ''// The line above fails with the error:
        ''// "Run-time error '-2147024809 (80070057)':
        ''//     The destination range is not on the same worksheet
        ''//     that the Query table is being created on."

        .Name = _
        "?tmp=toolbar_FlvTube_homepageamp;prt=..."
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .BackgroundQuery = True
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .WebSelectionType = xlEntirePage
        .WebFormatting = xlWebFormattingNone
        .WebPreFormattedTextToColumns = True
        .WebConsecutiveDelimitersAsOne = True
        .WebSingleBlockTextImport = False
        .WebDisableDateRecognition = False
        .WebDisableRedirections = False
        .Refresh BackgroundQuery:=False
    End With
End Sub
  

Записанный макрос завершается с ошибкой, как описано в комментарии.

Ответ №1:

Вы записали макрос, когда лист 6 был активен, но теперь пытаетесь запустить его на другом листе. Чтобы запустить макрос для текущего активного листа, просто измените код следующим образом:

 Sub Macro3()
    With ActiveSheet.QueryTables.Add(Connection:= _
        "URL;http://..." _
        , Destination:=ActiveSheet.Range("$G$23"))
        ...
    End With
End Sub
  

Редактировать: (в ответ на комментарий):

Мне нужно иметь возможность вставить результаты запроса на другой лист, чем активный, поскольку макрос может быть запущен в любое время и должен каждый раз вставляться в одно и то же место. Возможно, есть способ изменить ваш активный лист с помощью кода?

Ошибка возникает, когда два листа отличаются друг от друга, поэтому, если вы хотите, чтобы волшебство произошло на определенном листе, вам следует указать этот лист вместо использования ActiveSheet . Следующий код всегда будет размещать таблицу запросов на Sheet6:

 Sub Macro3()
    With Sheet6.QueryTables.Add(Connection:= _
        "URL;http://..." _
        , Destination:=Sheet6.Range("$G$23"))
        ...
    End With
End Sub
  

Комментарии:

1. Мне нужно иметь возможность вставить результаты запроса на другой лист, чем активный, поскольку макрос может быть запущен в любое время и должен каждый раз вставляться в одно и то же место. Возможно, есть способ изменить ваш активный лист с помощью кода?

2. Абсолютно! Просто добавьте Sheet6.Activate в свой код, прямо перед With ... блоком.

3. Или, что еще лучше, измените обе ActiveSheet ссылки на Sheet6 .