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
- 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.
- Try changing the URL to a different web page and see if you get an error
- 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 |
Собственно сабж: Обновление запроса PQ через макрос или горячие клавиши — такое реально? Под горячими клавишами имею в виду, что для каждого запроса задавать индивидуальную клавишу, а не общую на все запросы. Спасибо. |
БМВ Модератор Сообщений: 21652 Excel 2013, 2016 |
А в чем проблема? Набор маленьких подпрограмм , которые запускают обновления конкретного запроса и привязка их к горячим кнопкам. По вопросам из тем форума, личку не читаю. |
Денис Пользователь Сообщений: 188 |
#3 28.12.2017 09:39:07
так в этом и есть вопрос) Как к конкретному запросу привязать горячую клавишу? |
||
Включаете макрорекордер. В окошке создания макроса задаете хоткей. Становитесь на выгруженный запрос, правой мышью, «обновить». Бинго |
|
БМВ Модератор Сообщений: 21652 Excel 2013, 2016 |
#5 28.12.2017 10:44:17 Кнопка привязывается не к запросу, а к конкретной подпрограмме (ну или макросу, как многие это кличут), Это подпрограмма вызывает обновление запроса или передает идентификатор запроса другой подпрограмме, которая обновляет указанный запрос. Воротить что-то более сложное наверно не лучший выбор.
q.и й не везде нужно, но был случай когда раскладка влияла. По вопросам из тем форума, личку не читаю. |
||
Денис Пользователь Сообщений: 188 |
#6 28.12.2017 10:44:54
Благодарю! |
||
Денис Пользователь Сообщений: 188 |
Появляется вот такая функция — Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False |
Денис Пользователь Сообщений: 188 |
#8 28.12.2017 11:41:26
ДА этот вариант тоже пока не самый простой) Изменено: Денис — 14.01.2018 11:17:47 |
||
БМВ Модератор Сообщений: 21652 Excel 2013, 2016 |
sheet2.ListObjects(«Table1_2»).QueryTable.Refresh По вопросам из тем форума, личку не читаю. |
Денис Пользователь Сообщений: 188 |
БМВ, не получается. Файл приложил. |
БМВ Модератор Сообщений: 21652 Excel 2013, 2016 |
и не должно , ведь у вас там «Таблица1_2», а не Таблица1 на листе Изменено: БМВ — 28.12.2017 13:52:00 По вопросам из тем форума, личку не читаю. |
Денис Пользователь Сообщений: 188 |
БМВ, Понял. Работает. Благодарю! |
Денис Пользователь Сообщений: 188 |
БМВ, я не знаток VBA, но вот момент — разве нельзя лист называть через пробел? То есть Если Это не критично, но интересно. |
БМВ Модератор Сообщений: 21652 Excel 2013, 2016 |
Так как именовать с пробелом можно только лист а не сам объект листа, то в этом случае для обращений по имени используется Worksheets(<SheetName>) . Но у этого метода есть один минус, переименовать лист означает сделать нерабочим код, это надо иметь в виду. В рабочем примере выше используется именно объект книги. Его тоже можно переименовать(но без пробелов), но это более скрыто от глаз. Видеть эти имена и соответвуюзие им имена листов вы можете в редакторе VBA. По вопросам из тем форума, личку не читаю. |
Денис Пользователь Сообщений: 188 |
БМВ, Столкнулся с такой проблемой, что не во всех файлах могу обновить запросы. Если получится — посмотрите, пожалуйста. |
БМВ Модератор Сообщений: 21652 Excel 2013, 2016 |
#16 14.01.2018 09:02:03 Денис, ну нет у вас объекта Лист7 в этой книге. Вы не прочитали внимательно #14 .
или
И что б не путаться, не называйте запросы как Лист1 Изменено: БМВ — 14.01.2018 11:18:23 По вопросам из тем форума, личку не читаю. |
||||
Денис Пользователь Сообщений: 188 |
БМВ, Понял. Не досмотрел. Спасибо. |
Viper25 Пользователь Сообщений: 198 |
#18 18.04.2022 19:35:54
Я использую макрос по обновлению всех файлов в выбранной папке.
В файлах разное количество запросов PQ и по-разному они называются. Изменено: Viper25 — 18.04.2022 20:02:44 |
||||||