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

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
 

wlad1164

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

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

#1

27.08.2017 23:26:46

Доброго времени суток, имеется такая проблема:
Есть небольшой макрос

Код
Application.ScreenUpdating = False
Sheets("лист2").Visible = True
    Sheets("Лист2").Range("G6").Select
    Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
Sheets("Лист1").Select
Sheets("Лист2").Visible = False
Application.ScreenUpdating = True

Суть данного макроса в том чтобы показать скрытый лист, на котором находится таблица с данными из web запроса, обновить их и скрыть данный лист, оставшись на листе1

Если выполнять макрос из редактора по F8 (шаг за шагом) то все проходит гладко, если же выполнять нажатием «старт» то после этапа обновления запроса что то идет не так…

Ощущение что это из-за того что макрос продолжает работу не дождавшись обновления дынных, пытался ставить паузу через Application.Wait но все ровно беда…

Вобщем задача:
1. отобразить скрытый лист
2. обновить данные в таблице (путем web запроса) или другим способом (данные находятся в таблице на сайте)
3. скрыть этот лист
4. продолжить работу макроса

MS Excel 2016 , может в нем беда?

Прикрепленные файлы

  • wlad1164.xlsm (23.73 КБ)

 

Jungl

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

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

#2

28.08.2017 15:46:05

wlad1164, обращайтесь к объекту напрямую, без всяких select и visible.

Работает и со скрытым листом:

Код
Sub Test()
    Sheets("Лист2").ListObjects(1).QueryTable.Refresh BackgroundQuery:=False
End Sub

Либо так:

Код
Sheets("Лист2").Range("A1").ListObject.QueryTable.Refresh BackgroundQuery:=False

Если уж совсем влезать в SQL запросы, например выборка по фамилии, то так:

Код
Sub GetData()
    Set QT = Sheets("Лист2").ListObjects(1).QueryTable
    With QT
        .CommandType = xlCmdSql
        .CommandText = "SELECT * FROM [Table 0] WHERE [Фамилия]='Иванов И.И.'"
        .Refresh BackgroundQuery:=False
    End With
End Sub
 

Максим Зеленский

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

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

Microsoft MVP 2018-2022

#3

28.08.2017 15:50:53

ЕМНИП, дождаться окончания выполнения запроса можно, поставив после вызова обновления строку

Код
Do Events

F1 творит чудеса

 

wlad1164

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

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

#4

28.08.2017 23:15:21

Цитата
Jungl написал:
обращайтесь к объекту напрямую, без всяких select и visible.

Спасибо, я всего лишь учусь, поэтому все делаю по подобию записи с макрекодера (или как его там)

Цитата
Максим Зеленский написал:
поставив после вызова обновления строку

Спасибо, буду побывать=)

 

wlad1164

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

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

#5

28.08.2017 23:29:47

Jungl, если так

Код
Sub Test()
    Sheets("Лист2").ListObjects(1).QueryTable.Refresh BackgroundQuery:=False
    Sheets("Лист1").Select
End Sub

макрос запускаю кнопкой «прямоугольник» расположенной на «лист1» после выполнения макроса, активным остается «лист2»
если же «лист2»  был изначально скрыт, то после выполнения макроса активный лист не выбирается (точнее ни один из листов не активен, в смысле не выбран)

с функцией

Код
Do Events 

никаких изменений не наблюдается…

Изменено: wlad116428.08.2017 23:30:26

 

Jungl

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

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

#6

29.08.2017 16:07:52

Цитата
wlad1164 написал:
Sheets(«Лист1»).Select

Зачем?
Если вы хотите что-то получить из листа2 на лист1, используйте целевые ячейки/диапазоны.
Например:

Код
Sheets("Лист1").Range("A1").Value = Sheets("Лист2").Range("A1").Value

И не нужно листы выбирать.

Цитата
wlad1164 написал:
точнее ни один из листов не активен, в смысле не выбран

Не верю, проверьте:

Код
MsgBox "Активный лист """ & ActiveSheet.Name & """"
 

wlad1164

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

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

#7

29.08.2017 18:14:53

Цитата
Jungl написал:
Зачем?

Затем чтобы после выполнения макроса остаться на Лист1

Цитата
Jungl написал:
Не верю, проверьте:

Проверил, результат примерно таков:
1.Отображается(выбран) «лист1» с кнопкой к которой привязан макрос, лист2

не скрыт

2.жму кнопку
3.выполняется макрос, данные обновляются
4.появляется сообщение от MsgBox «активный лист лист1»
5.жму «ОК»
6.закрывается окно MsgBox  и активным выбирается Лист 2

Второй случай, результат примерно таков:
1.Отображается (выбран) «лист1» с кнопкой к которой привязан макрос, лист2

скрыт

2.жму кнопку
3.выполняется макрос, данные обновляются
4.появляется сообщение от MsgBox «активный лист лист1»
5.жму «ОК»
6.закрывается окно MsgBox  и ни один из листов не выбран (не активен)
7. на мониторе наблюдается  примерно такое:

Скрытый текст

выделение соответствует размеру таблицы на «лист2»
сама сетка и содержимое соответствует тому листу, с которого запускали макрос

Сами же вкладки листов НЕ активны (все из видимых)

Скрытый текст

Прикрепленные файлы

  • 2017-08-29_181228.png (3.35 КБ)

 

wlad1164

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

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

#8

29.08.2017 18:21:35

Небольшое дополнение, отображается тот лист с которого был запущен макрос, а EXCEL работает с ним как буд-то выбран скрытый лист
и собственно GIF-ка в доказательство

ссылка на GIF т.к. прикрепить к сообщению нельзя

И если не переходя из этого «чудо-листа» выполнить

Код
MsgBox "Активный лист """ & ActiveSheet.Name & """" 

Выведет сообщение что активен лист2, хотя лист2 скрыт!
и уже по нажатию «ок» перебрасывает на видимый лист который справа от «лист 2»

Даже если ВРУЧНУЮ нажать «Обновить все» то происходит то же самое, полагая дело не в макросе, а в самом Excel

Изменено: wlad116429.08.2017 18:36:25

 

ZVI

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

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

Попробуйте после .Refresh добавить такие 2 строчки кода:
Application.CalculateUntilAsyncQueriesDone
Application.ScreenUpdating = True

 

wlad1164

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

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

#10

29.08.2017 21:46:22

Цитата
ZVI написал:
после .Refresh добавить такие 2 строчки кода

Без изменений, все по-прежнему

Код
    Sheets("лист2").ListObjects(1).QueryTable.Refresh
    Application.CalculateUntilAsyncQueriesDone
    Application.ScreenUpdating = True 

Начинаю косо смотреть на win10+office2016 , завтра по пробую на других версиях…

Изменено: wlad116429.08.2017 21:51:23

 

Jungl

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

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

#11

29.08.2017 22:42:38

Цитата
wlad1164 написал:
и собственно GIF-ка в доказательство

теперь я вас понял, не сталкивался с таким ранее.
есть такой вариант. используется получение внешних данных «Из интернета». Данные поступают на Лист3 и формулами подтягиваются на Лист1.

Прикрепленные файлы

  • wlad1164.xlsm (31.14 КБ)

Изменено: Jungl29.08.2017 22:42:49

 

wlad1164

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

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

#12

29.08.2017 22:51:05

Цитата
Jungl написал:
есть такой вариант. используется получение внешних данных «Из интернета».

Тоже перешел к такому варианту, жаль что данные полученные таким образом нельзя напрямую заносить в «умную» таблицу, но что поделать)

  • #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

Понравилась статья? Поделить с друзьями:
  • Как исправить баг на телефоне
  • Нашел айрподсы как подключить
  • Как найти дело по номеру судебного приказа
  • Как найти катет если известна медиана
  • Как найти фильтр по фотографии