VBA Excel QueryTables.add. Обновить фоновую ошибку запроса - PullRequest
4 голосов
/ 06 апреля 2011
Sub Macro1()
Dim URL As String
Dim Path As String
Dim i As Integer
For i = 2 To 50
If Range("Prices!E" & i).Value <> 1 Then
URL = Range("Prices!D" & i).Text
Path = Range("Prices!F" & i).Text
End If
Sheet19.Activate
With ActiveSheet.QueryTables.Add(Connection:= _
    "URL;" & URL _
    , Destination:=ActiveSheet.Range("$A$1"))
    .Name = _
    "" & Path
    .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
    //'In the Line above the above
    //'Run time error '1004
    //'An unexpected error has occured
End With
Next i
End Sub

Приведенный выше код создает ошибку в указанной строке. Поиск в Google по .Refresh BackgroundQuery показывает, что он очень требователен к циклам. Простое удаление строки ничего не показывает в Excel.

При текущем сообщении об ошибке код работает нормально для первого значения i, а затем прерывается.

Для ответа и комментариев- TLDR: .Refresh BackgroundQuery: = False завершится ошибкой, если введенный вами запрос неверен или имеет неправильный формат. Проблема в этом случае заключалась в том, что цикл for ... next вызывал ячейки для использования в качестве URL, которые не содержат в них значений. Однако он потерпит неудачу каждый раз, когда запрос искажен.

Ответы [ 3 ]

4 голосов
/ 06 апреля 2011

Все предыдущие строки внутри оператора With задают свойства.
.Refresh BackgroundQuery := False является вызовом метода.

Обновление должно обновлять результаты.
Фоновый запрос предназначен для запросов данных SQL и является необязательным, поэтому я думаю, что вы можете оставить его и просто иметь .Refresh

Ссылка на справку по методу обновления таблицы запросов

Редактировать Может показаться, что с URL-адресом что-то не так, и когда он обновляется, он не может этого сделать. может быть проблема с прокси, или она не подключена к сети, или URL не существует.

1 голос
/ 01 августа 2011

Единственный способ решить эту проблему - удалять активную таблицу запросов после каждой итерации.Полезный пример решения обеспечивает:

https://social.technet.microsoft.com/Forums/office/en-US/956dc1b6-bd37-4b97-a042-ba2a37f729b6/removing-querytables-and-leaving-the-results?forum=excel

0 голосов
/ 10 июня 2016

Я не уверен, почему мое исправление сработало, но вот оно:

Я также использовал querytables.add в цикле for и добавлял файлы .asc. Эта ошибка появлялась только после последнего добавления - поэтому моя программа, по сути, сделала то, что я хотела, но она прервала работу. При последнем запуске цикла For я удалил оператор .Refresh BackgroundQuery: = False. Ему нужно было вставить мои данные для всех предыдущих прогонов через цикл For.

В основном я заменил это:

          .Refresh BackgroundQuery:=False

С этим:

          If Index = ctr Then

          Else
               .Refresh BackgroundQuery:=False
          End If
...