Refresh backgroundquery false ошибка

I’ve looked at some others with the same error but their solution doesn’t help me.

Refresh BackgroundQuery:=False Error 1004

Here is my code

'
' LoadData Macro
'

'
With ActiveSheet.QueryTables.Add(Connection:= _
    "TEXT;Macintosh HD:Users:Karrar:Desktop:Excel.txt", Destination:=Range("A1"))
    .Name = "Excel"
    .FieldNames = True
    .RowNumbers = False
    .FillAdjacentFormulas = False
    .RefreshOnFileOpen = False
    .BackgroundQuery = False
    .RefreshStyle = xlInsertDeleteCells
    .SavePassword = False
    .SaveData = True
    .AdjustColumnWidth = False
    .TextFilePromptOnRefresh = False
    .TextFilePlatform = xlMacintosh
    .TextFileStartRow = 1
    .TextFileParseType = xlDelimited
    .TextFileTextQualifier = xlTextQualifierDoubleQuote
    .TextFileConsecutiveDelimiter = True
    .TextFileTabDelimiter = False
    .TextFileSemicolonDelimiter = False
    .TextFileCommaDelimiter = False
    .TextFileSpaceDelimiter = True
    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
    .UseListObject = False
    .Refresh BackgroundQuery:=False
End With
End Sub

  • Remove From My Forums
  • Question

  • This might be a common problem and I found another topic that relates to mine but it isn’t quiet the same and I can’t find a solution to my problem by using it’s solution.

    I have a VBA script for getting data from a HTML table to a Excel file. At the HTML page the VBA script first logges in with a name and password written in the Excel file and given with the GET method.

    The HTML checks if the user is already logged in (session variables) and if so it gets the data from the table to Excel. If not the user is logged in and then the data is send.

    When I run the script it returns a 1004 error. This error is given at «.Refresh BackgroundQuery:=False».

    From using Google I understand that a 1004 error is given when the browser returns an errorcode that VBA doesn’t know.

    When I open the page (In both cases (with the username and password in the URL and already logged in without this)) in any browser (Safari, Firefox, Internet Explorer) the page doesn’t return any error nor report any problems with the page.

    My code:

    Sub GetData() 'Private Sub Workbook_Open() Private Sub Worksheet_Activate()<br/>
      Dim usr As String    'Username<br/>
      Dim pwd As String    'Password<br/>
      Dim url As String    'URL with username and password --> GET<br/>
      Dim baseUrl As String  'URL of page<br/>
      Dim connUrl As String  'URL for connection to HTML<br/>
      <br/>
      usr = ActiveSheet.Range("A1").Value<br/>
      pwd = ActiveSheet.Range("B1").Value<br/>
      <br/>
      baseUrl = "http://xxx/xx/xx/xx/xx/xx/xx.aspx"<br/>
      url = baseUrl & "?usr=" & usr & "&pwd=" & pwd<br/>
      connUrl = "URL;" & baseUrl<br/>
    <br/>
      'open Internet Explorer<br/>
      Set ie = CreateObject("InternetExplorer.Application")<br/>
    <br/>
      'go to .Navigate and show this<br/>
      With ie<br/>
        .Visible = True<br/>
        .Navigate url<br/>
    <br/>
        'do this until the page is fully loaded<br/>
        Do While ie.busy And Not ie.readystate = 4<br/>
          DoEvents<br/>
        Loop<br/>
        <br/>
        'create a Web Query in Sheet1 with connURL beginning from cell A5<br/>
        With ActiveSheet.QueryTables.Add(Connection:=connUrl, Destination:=Range("A4"))<br/>
          .Name = "stockListQuery"<br/>
          .RowNumbers = False<br/>
          .FillAdjacentFormulas = False<br/>
          .PreserveFormatting = True<br/>
          .RefreshOnFileOpen = False<br/>
          .BackgroundQuery = False<br/>
          .RefreshStyle = xlOverwriteCells<br/>
          .SavePassword = False<br/>
          .SaveData = True<br/>
          .AdjustColumnWidth = True<br/>
          .RefreshPeriod = 0<br/>
          .WebSelectionType = xlAllTables<br/>
          .WebFormatting = xlWebFormattingNone<br/>
          .WebPreFormattedTextToColumns = True<br/>
          .WebConsecutiveDelimitersAsOne = True<br/>
          .WebSingleBlockTextImport = False<br/>
          .WebDisableDateRecognition = False<br/>
          .WebDisableRedirections = False<br/>
          <br/>
          .Refresh BackgroundQuery:=False<br/>
          <br/>
        <br/>
        End With<br/>
        Do While ie.busy And Not ie.readystate = 4<br/>
          DoEvents<br/>
        Loop<br/>
        <br/>
      End With<br/>
      <br/>
      'close Internet Explorer<br/>
      ie.Quit<br/>
      <br/>
      Set ie = Nothing<br/>
    End Sub<br/>
    
    

Answers

  • Three suggestions

    1. Maybe you don’t have an active worksheet that you can write to.  Place the macro into a new workbook and see if you get the same error.  The worksheet may be protected.
    2. Try changing the URL to a different web page and see if you get an error
    3. Record a new macro and go to the same webpage and see if you get an error.

    jdweng

    • Marked as answer by

      Thursday, December 30, 2010 12:55 PM

  • #6

I am replying to this question a couple of years late.

I encountered the same problem today. When I was altering an excel application that use to run in Excel 97 so it can run in Excel 07. ( yes we are that much out of date at work) There was a querytable in the range A48 in the excel spreadsheet I wanted to refresh using the following VB code.

Range(«A48»).Select
Selection.QueryTable.Refresh BackgroundQuery:=False

«Selection.QueryTable.Refresh BackgroundQuery:=False» would not work in Excel 07.. after doing a far bit of googling I found a few people with the same porblem but not solution. So I recorded a macro in excel with me manually refreshing the the query (right click with the mouse on the selection «A48» and hit ‘refresh’ option on the drop down menu that appears) and looking at the macro code I got my code to work.

By changing

Selection.QueryTable.Refresh BackgroundQuery:=False

to

Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

The above piece of code worked!!!!

Last edited: Mar 25, 2009

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
Sub formir_balance()
  Application.ScreenUpdating = False
  Dim i, r, j
  
'GoTo test
  
    Sheets("import").QueryTables(1).Refresh BackgroundQuery:=False      \Вот здесь выдает ошибку
    Sheets("obrab").Range("L11:V65536").FillDown
    Sheets("svod_tab").PivotTables("СводнаяТаблица1").PivotCache.Refresh
    
    Sheets("Лист1").Select
    Cells.Select
    Selection.Delete Shift:=xlUp
    
    Sheets("Лист1").Select
    Range("A1").Select
    With ActiveSheet.QueryTables.Add(Connection:="TEXT;\MAR-ckanalitikрисканалитикаIMPORT_Для баланса mas_verTest.txt", _
        Destination:=Range("A1"))
        .Name = "Test_1"
        .FieldNames = True
        .RowNumbers = False
        .FillAdjacentFormulas = False
        .PreserveFormatting = True
        .RefreshOnFileOpen = False
        .RefreshStyle = xlInsertDeleteCells
        .SavePassword = False
        .SaveData = True
        .AdjustColumnWidth = True
        .RefreshPeriod = 0
        .TextFilePromptOnRefresh = False
        .TextFilePlatform = 1251
        .TextFileStartRow = 1
        .TextFileParseType = xlFixedWidth
        .TextFileTextQualifier = xlTextQualifierDoubleQuote
        .TextFileConsecutiveDelimiter = False
        .TextFileTabDelimiter = True
        .TextFileSemicolonDelimiter = False
        .TextFileCommaDelimiter = False
        .TextFileSpaceDelimiter = False
        .TextFileColumnDataTypes = Array(2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1)
        .TextFileFixedColumnWidths = Array(33, 23, 14, 16, 17, 19, 15, 15, 8, 10)
        .TextFileTrailingMinusNumbers = True
        .Refresh BackgroundQuery:=False
    End With
    Columns("A:A").ColumnWidth = 18.43
    Columns("A:A").ColumnWidth = 22
    
    
     Sheets("Лист1").Select
    Range("D4:F4").Select
    Selection.Copy
    Sheets("bal_n").Select
    Range("AL1").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    With Selection.Font
        .Name = "Times New Roman"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
    End With
    Selection.Font.Bold = True
    Columns("AM:AM").EntireColumn.AutoFit
  
  
  
  'удаление старых данных
     Sheets("Изм счета").Select
    Range("C3:H300").Select
    Selection.ClearContents
    
    'Sheets("Лист1").Select
    'Cells.Select
    'Selection.Delete Shift:=xlUp
 '   Sheets("bal_n").Select
    
    
' удаление пустых строк
 '   LastRow = ActiveSheet.UsedRange.Row - 1 + ActiveSheet.UsedRange.Rows.Count
 ' Application.ScreenUpdating = False
  'For r = LastRow To 1 Step -1
 ' If Application.CountA(Rows(r)) = 0 Then Rows(r).Delete
'  Next r
  
  
'     i = 2
'    j = 2
 
'   форматируем колонку Z - формат Общий
'   ThisWorkbook.Sheets("Лист1").Columns("Z:Z").NumberFormat = "General"
    
'    While ThisWorkbook.Sheets("Лист1").Cells(i, 2) <> ""
        'заполнение колонки Z кодом
        'ThisWorkbook.Sheets("Лист1").Cells(i, 26) = "=RC[-24]&RC[-19]"
        
'    While Range("B10:K7000").Select
'    Selection.Range ("B9:B7000")
'    Range("B9:B7000").Select
'test:
    For j = 3 To ThisWorkbook.Sheets("Изм счета").UsedRange.Rows.Count
        'If ThisWorkbook.Sheets("Изм счета").Cells(j, 2) <> "" Then
            For i = 10 To ThisWorkbook.Sheets("Лист1").UsedRange.Rows.Count
                If ThisWorkbook.Sheets("Лист1").Cells(i, 2) = ThisWorkbook.Sheets("Изм счета").Cells(j, 2) Then
                'присваиваем новое значение кода на листе "Лист1"
                    ThisWorkbook.Sheets("Изм счета").Cells(j, 3) = ThisWorkbook.Sheets("Лист1").Cells(i, 3)
                    ThisWorkbook.Sheets("Изм счета").Cells(j, 4) = ThisWorkbook.Sheets("Лист1").Cells(i, 4)
                    ThisWorkbook.Sheets("Изм счета").Cells(j, 5) = ThisWorkbook.Sheets("Лист1").Cells(i, 5)
                    ThisWorkbook.Sheets("Изм счета").Cells(j, 6) = ThisWorkbook.Sheets("Лист1").Cells(i, 6)
                    ThisWorkbook.Sheets("Изм счета").Cells(j, 7) = ThisWorkbook.Sheets("Лист1").Cells(i, 7)
                    ThisWorkbook.Sheets("Изм счета").Cells(j, 8) = ThisWorkbook.Sheets("Лист1").Cells(i, 8)
'               ThisWorkbook.Sheets("Лист1").Cells(i, 6) = ThisWorkbook.Sheets("Изм данные").Cells(j, 5)
                'Range("i,3:i,8").Select
                'Selection.Copy
                'Sheets("Изм счета").Select
                'Range("j,3:j,8").Select
                'ActiveSheet.Paste
                    Exit For
                End If
            Next
       ' End If
    Next
'        i = i + 1
'    Wend
    Sheets("Изм счета").Select
    Columns("C:H").Select
    Range("C2").Activate
    Selection.Replace What:=".", Replacement:=",", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
        Range("J1").Select
    Selection.Copy
    Sheets("Изм счета").Select
    Range("C3:H300").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlMultiply, _
    SkipBlanks:=False, Transpose:=False
    Sheets("bal_n").Select
    MsgBox ("  Отчет сформирован!")
    
      
    
End Sub
 

Денис

Пользователь

Сообщений: 188
Регистрация: 29.08.2017

Собственно сабж: Обновление запроса PQ через макрос или горячие клавиши — такое реально? Под горячими клавишами имею в виду, что для каждого запроса задавать индивидуальную клавишу, а не общую на все запросы.

Спасибо.

 

БМВ

Модератор

Сообщений: 21652
Регистрация: 28.12.2016

Excel 2013, 2016

А в чем проблема? Набор маленьких подпрограмм , которые запускают обновления конкретного запроса и привязка их к горячим кнопкам.

По вопросам из тем форума, личку не читаю.

 

Денис

Пользователь

Сообщений: 188
Регистрация: 29.08.2017

#3

28.12.2017 09:39:07

Цитата
БМВ написал:
привязка их к горячим кнопкам

так в этом и есть вопрос) Как к конкретному запросу привязать горячую клавишу?

 

Включаете макрорекордер. В окошке создания макроса задаете хоткей. Становитесь на выгруженный запрос, правой мышью, «обновить». Бинго

 

БМВ

Модератор

Сообщений: 21652
Регистрация: 28.12.2016

Excel 2013, 2016

#5

28.12.2017 10:44:17

Кнопка привязывается не к запросу, а к конкретной подпрограмме (ну или макросу, как многие это кличут), Это подпрограмма вызывает обновление  запроса или передает идентификатор запроса другой подпрограмме, которая обновляет указанный запрос. Воротить что-то более сложное наверно не лучший выбор.
В модуль книги

Код
Private Sub Workbook_Activate()
    HotKeyON
End SubPrivate Sub Workbook_Deactivate()
    HotKeyOFF
End SubPrivate Sub Workbook_Open()
    HotKeyON
End SubPrivate Sub HotKeyON()
    On Error Resume Next
    Application.OnKey "^q", "'" & ActiveWorkbook.Name & "'!PQRefresh1"
    Application.OnKey "^й", "'" & ActiveWorkbook.Name & "'!PQRefresh1"
End SubPrivate Sub HotKeyOFF()
    On Error Resume Next
    Application.OnKey "^q"
    Application.OnKey "^й"
End Sub

q.и й не везде нужно, но был случай когда раскладка влияла.
ну и соответствено делайте модули с PQRefresh1, PQRefresh2 …….

По вопросам из тем форума, личку не читаю.

 

Денис

Пользователь

Сообщений: 188
Регистрация: 29.08.2017

#6

28.12.2017 10:44:54

Цитата
Максим Зеленский написал:
Включаете макрорекордер. В окошке создания макроса задаете хоткей. Становитесь на выгруженный запрос, правой мышью, «обновить». Бинго

Благодарю!
Осталось только найти свободное сочетание клавиш, а то чего-то все заняты…
И порядок с обновлением запросов решен!

 

Денис

Пользователь

Сообщений: 188
Регистрация: 29.08.2017

Появляется вот такая функция — Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
И если запускать макрос, то обновляет только ТОТ запрос, который выделен,а тот который я указал при записи.

 

Денис

Пользователь

Сообщений: 188
Регистрация: 29.08.2017

#8

28.12.2017 11:41:26

Цитата
БМВ написал: Кнопка привязывается не к запросу, а к конкретной подпрограмме…, Это подпрограмма вызывает обновление  запроса или передает идентификатор запроса другой подпрограмме, которая обновляет указанный запрос.

ДА этот вариант тоже пока не самый простой)
Мне пока его запустить не удалось(

Изменено: Денис14.01.2018 11:17:47

 

БМВ

Модератор

Сообщений: 21652
Регистрация: 28.12.2016

Excel 2013, 2016

sheet2.ListObjects(«Table1_2»).QueryTable.Refresh  
Имя листа и имя объекта (или его индекс) уже сами.

По вопросам из тем форума, личку не читаю.

 

Денис

Пользователь

Сообщений: 188
Регистрация: 29.08.2017

БМВ, не получается. Файл приложил.

 

БМВ

Модератор

Сообщений: 21652
Регистрация: 28.12.2016

Excel 2013, 2016

и не должно , ведь у вас там «Таблица1_2», а не Таблица1 на листе
Если на листе один запрос, то используйте .ListObjects(1).QueryTable.Refresh

Изменено: БМВ28.12.2017 13:52:00

По вопросам из тем форума, личку не читаю.

 

Денис

Пользователь

Сообщений: 188
Регистрация: 29.08.2017

БМВ, Понял. Работает. Благодарю!

 

Денис

Пользователь

Сообщений: 188
Регистрация: 29.08.2017

БМВ, я не знаток VBA, но вот момент — разве нельзя лист называть через пробел? То есть Если
Лист4.ListObjects(1).QueryTable.Refresh — обновляет
Лист Новый.ListObjects(1).QueryTable.Refresh — ругается на синтаксис.

Это не критично, но интересно.

 

БМВ

Модератор

Сообщений: 21652
Регистрация: 28.12.2016

Excel 2013, 2016

Так как именовать с пробелом можно только лист а не сам объект листа, то в этом случае для обращений по имени используется Worksheets(<SheetName>) . Но у этого метода есть один минус, переименовать лист означает сделать нерабочим код, это надо иметь в виду. В рабочем примере выше используется именно объект книги. Его тоже можно переименовать(но без пробелов), но это более скрыто от глаз. Видеть эти имена и соответвуюзие им имена листов вы можете в редакторе VBA.

По вопросам из тем форума, личку не читаю.

 

Денис

Пользователь

Сообщений: 188
Регистрация: 29.08.2017

БМВ, Столкнулся с такой проблемой, что не во всех файлах могу обновить запросы.
Выкладываю файл в котором не могу обновить запрос (подключение к внешнему файлу), хотя если сделать новый файл — там все выполняется.

Если получится — посмотрите, пожалуйста.

 

БМВ

Модератор

Сообщений: 21652
Регистрация: 28.12.2016

Excel 2013, 2016

#16

14.01.2018 09:02:03

Денис, ну нет у вас объекта Лист7 в этой книге. Вы не прочитали внимательно  #14 .

Код
Sub auto()
Worksheets("Лист7").ListObjects("Лист1").QueryTable.Refresh
End Sub

или

Код
Sub auto()
Лист18.ListObjects("Лист1").QueryTable.Refresh
End Sub

И что б не путаться, не называйте запросы как Лист1

Изменено: БМВ14.01.2018 11:18:23

По вопросам из тем форума, личку не читаю.

 

Денис

Пользователь

Сообщений: 188
Регистрация: 29.08.2017

БМВ, Понял. Не досмотрел. Спасибо.

 

Viper25

Пользователь

Сообщений: 198
Регистрация: 14.07.2016

#18

18.04.2022 19:35:54

Цитата
написал:
Появляется вот такая функция — Selection.ListObject.QueryTable.Refresh BackgroundQuery:=FalseИ если запускать макрос, то обновляет только ТОТ запрос, который выделен
Цитата
написал:
Sub auto()Worksheets(«Лист7»).ListObjects(«Лист1»).QueryTable.RefreshEnd Sub

Я использую макрос по обновлению всех файлов в выбранной папке.
Но запросы PQ данный макрос не обновляет. :(

Код
Sub OtkritVseKnigi()
    Dim MyFiles As String, sFolder As String
  
    sFolder = ShowFolderDialog() & Application.PathSeparator
    MyFiles = Dir(sFolder & "*.xls*")
    Application.ScreenUpdating = False
    Do While MyFiles <> ""
        Workbooks.Open sFolder & MyFiles
        ActiveWorkbook.RefreshAll
        ActiveWorkbook.Close SaveChanges:=True
        MyFiles = Dir
    Loop
    Application.ScreenUpdating = True
    MsgBox "Файлы обновлены!", vbInformation, "Конец"
End Sub
 
Function ShowFolderDialog() As String
    Dim oFD As FileDialog
    Dim x, lf As Long
    'назначаем переменной ссылку на экземпляр диалога
    Set oFD = Application.FileDialog(msoFileDialogFolderPicker)
    With oFD 'используем короткое обращение к объекту
        'так же можно без oFD
        'With Application.FileDialog(msoFileDialogFolderPicker)
        .Title = "Выбрать папку с отчетами" '"заголовок окна диалога
        .ButtonName = "Выбрать папку"
        .Filters.Clear 'очищаем установленные ранее типы файлов
        '.InitialFileName = "C:Temp" 'назначаем первую папку отображения
        .InitialView = msoFileDialogViewLargeIcons 'вид диалогового окна(доступно 9 вариантов)
        If oFD.Show = 0 Then Exit Function 'показывает диалог
        'цикл по коллекции выбранных в диалоге файлов
        x = .SelectedItems(1) 'считываем путь к папке
        ShowFolderDialog = x
    End With
End Function

В файлах разное количество запросов PQ и по-разному они называются.
Подскажите, можно ли какую-то универсальную команду использовать для обновления всех запросов PQ.
Заранее спасибо.

Изменено: Viper2518.04.2022 20:02:44

Понравилась статья? Поделить с друзьями:
  • Refra кондиционер коды ошибок
  • Reflash 12345 ошибка
  • Referenceerror gulp is not defined ошибка
  • Reduced engine performance range rover ошибка
  • Reduce engine performance land rover ошибка