Привет. Переделываю скрэпинг с www.rp5.ru сайта, так как ранее работало, теперь (видимо с обновлением сайта) перестало. Как это ранее работало на vba 1) Создаю CreateObject("InternetExplorer.Application") 2) Через метод navigate гружу нужную страницу (например https://rp5.ru/Weather_archive_in_Yeysk) 3) На странице программно (через VBA (через GetElementsByClassName и/или GetElementById)) перехожу на вкладку Download weather archive, настраиваю Date Range, выбираю all days, формат Excel и далее нажимаю кнопку Select to file GZ (archive) и правее кнопки получаю прямую ссылку для скачивания, далее дело техники 4) Ранее вот этот кусок кода, нажимающий кнопку
Код
For Each Obj In IE.Document.getElementsByClassName("inner")
If Obj.innertext Like "Select to file GZ*" Then
...
Obj.Click
...
End If
Next
работал и не вызывал никаких вопросов, я получал ссылку для скачивания, а теперь не работает. Получаю ошибку Error #FS000. Может кто помочь как правильно на VBA нажать кнопку Select to file GZ (archive)? P.S. Пробую сейчас реализовать нажатие через
Добрый день Есть задача подружить VBA с Cloudera Hadoop. В идеале должна получиться такая парочка как MS Office (Excel/Access) в качестве фронт енда и Cloudera Hadoop в качестве бак енда и все это должно работать спомощью VBA. Поделитесь пожалуйста опытом/мыслями/ссылками, кто уже делал что-то подобное. Заранее спасибо
Добрый день. Задача в двух штрихах состоит в сборе данных из сети и складиваниии в БД с реализацией на VBA. Ранее все работало, но как изменилась версия сайта, работать перестало. Итак сам сайт https://data.tuik.gov.tr/Kategori/GetKategori?p=Agriculture-111 далее согласно рисунка я перехожу на нужную страницу (зеленые прямоугольники) и скачиваю файл, дальше дело техники.
Для получения прямой сылки я использую следующую конструкцию (имитирующую пользовательскую активность/нажатия)
и я добирался до нужной мне прямой ссылки для скачивания. Видимо текущая версия сайта не работоспособна на Internet Explorer, так как при "переходе" в конкретный пресс релиз Internet Explorer не отрабатывает и уходит в "бесконечные часы". Есть у кого какие либо идеи (с помощью Chrome, JS, ...) как иначе можно получить эту прямую ссылку (Table-1)? Заранее спс.
Open WFile For Input As #1
While Not EOF(1)
Line Input #1, tmpline
....
2) Далее разбирается строковая переменная и формируется множественный TSQL инсерт, который далее выполняется методом Execute объекта ADODB.Connection 3) Данные ложатся в БД, но не так как надо, а именно специфичные немецкие символы типа "ü" заменяются на "ь" например "Aachener Hügelland" в БД выглядит вот так "Aachener Hьgelland". Я понимаю, что проблема на стороне VBA между чтением файла и записью в БД, но как поправить что-то не соображу, заранее спасибо за помощь?
P.S. В договку, чтобы избежать лишних вопросов: - поля в БД типа NVARCHAR - в TSQL инсерте стоит N' где нужно для вставки данных в NVARCHAR поля
Добрый лень... Есть Excel файл (xlsb), который располагается на Share Point, с ним регулярно (ежедневно) работают несколько (3-5) пользователей, кто из офисной сети (хорошая сеть), кто удаленно из дома (я подозреваю, что на не очень хорошем интернете. Данный файл содержит макросы и CustomUI секцию в виде Ribbon'ов, через которые запускаются эти макросы. Так вот иногда (раз-два раза в неделю) CustomUI (Ribbon'ы) слетают (исчезают) из файла причем customUI14.xml из Excel файла исчезает напрочь, а все остальное данные и макросы остаются на месте. Пользоватеть работает нормально закрывает с сохранением файл и при следующем открытии у него нет кастомного Ribbon'а. Лечится только восстановление резервной копии. До короновируса, пока все сидели в офисе подобных проблем не было вообще. Соответственно, я интуитивно грешу на качество интернета у тех, кто работает из дома. Кто-нибудь уже сталкивался с подобным, каковы могут быть причины и, соответственно, какие могут быть решения? Заранее спасибо, Арт
Добрый вечер.... Долгое время работал на одной машине WIN7+MS Office 365 x86, пришлось сменить на WIN10+MS Office 365 x64.
Раньше все было нормально теперь не могу понять, где нужно подкрутить настройки. Итак фрагмент кода, который пыполняется со стороны MS Access и который отрабатывает не верно
Добрый день. Нужна ваша помощь по следующему вопросу. 1) Есть интернет ресурс https://cereobs.franceagrimer.fr/cereobs-sp/#/publications 2) Ддалее в этом ресурсе двигаемся по следующему пути Stades de développement и далее Blé tendre -> Épiaison -> XLS 3) Вот собственно информация из этого Excel файла и необходимо собирать с определенной регулярностью
Я вижу здесь следующие этапы решения задачи 1) Вычислить/найти прямой URL 2) Скачать этот файил 3) Распарсить уже локально и и разложить по полочкам в БД
Я пока застрял на этапе 1. Я понимаю, что этот этап не совсем относится в Excel, но если у кого есть подобный опыт я буду раз если поделитесь, как можно выловить прямую ссылку? Я пробовал использовать Fiddler2, но у меня не особо ничего не получилось, возможно я не умею им пользозваться.
Добрый день. Подскажите как программно (с помощью VBA) узнать, какой разлелитель в синтаксисе написания функций рабочего листа использует Excel? У меня возникает ошибка в этой строке кода (условное форматирование с формулой)
Т.е. на том экземпляре Excel, где в качестве разделителя параметров функций рабочего листа используется точка с запятой - код отрабатывает без ошибок, там же, где запятая - ошибка. Заранее Спасибо, Арт
Добрый день Нужна ваша помощь в написании формулы, чего-то не соображает голова сегодня, а вопрос для меня горящий... Формула, которая мне нужна находится в строке 3, она частично написана, но мне необходимы немного более сложные вычисления.
Я сделал: Balance +/- Сумму по региону (столбцу) НИЖЕ ДИАГОНАЛИ, но эту "Сумму по региону (столбцу)" необходимо очистить от задвоений, которые получаются в ячейках с Федеральными округами???
ID и PARENT_ID это иерархия, которая может быть использована для "Очистки"
Доброе утро. Нужна ваша помощь в написании формулы, чего-то не соображает голова сегодня, а вопрос для меня горящий... Формула, которая мне нужна находится в строке 3, она частично написана, но мне необходимы немного более сложные вычисления.
Я сделал: Balance +/- Сумму по региону (столбцу) НИЖЕ ДИАГОНАЛИ, но эту "Сумму по региону (столбцу)" необходимо очистить от задвоений, которые получаются в ячейках с Федеральными округами???
ID и PARENT_ID это иерархия, которая может быть использована для "Очистки"
Добрый день всем. Есть вот такая вот страница Мне необходимо с помощью VBA скачать файлик, но скажу сразу, чтобы уменьшить размер дискуссии, что нижеприведенная функция (именно в данном случае) не работает.
Код
Public Function Downloading(ByVal URL As String, ByVal LocalPath As String) As Boolean
On Error Resume Next
If AppState.FSO.FileExists(LocalPath) Then AppState.FSO.DeleteFile LocalPath, True
If AppState.FSO.FileExists(LocalPath) Then Downloading = True: Exit Function
Downloading = (URLDownloadToFile(0, URL, LocalPath, 0, 0) = 0)
End Function
Нижеприведенный код работоспособен, но необходимо обходить диалог IE
Код
Dim IE As Variant, Obj As Variant
Set IE = CreateObject("InternetExplorer.Application"): IE.Visible = True
IE.Navigate "https://circabc.europa.eu/ui/group/b21bad6d-4ffc-4aff-8ae6-fe5f35a7480a/library/0874d9bc-2772-4c8c-8...;
For Each Obj In IE.Document.getElementsByClassName("download")
Obj.Click
Next
Кто нибудь может помочь с IE (кохозить SendKey очень бы не хотелось) или у кого есть более искусный метод скачивания для данного случая?
Вопрос следующего плана. В компании по умолчанию всем ставят и настраивают MS Office на английском языке, но не запрещают самостоятельно перенастраивать офис на любой другой удобный язык. Нижеприведенный фрагмет кода условного форматирования (через формулу) работает на английском языке, а проблемы возникают на других языках.
Если у кого есть опыт работы в мультиязычной среде, посоветуйте пожалуйста какое-нибудь "бескостыльное решение" по данному вопросу условного форматирования?
P.S. Как вариант моего "костыльного решения" : запись в любую свободную ячейку через например FormulaR1C1, а затем копирование из FormulaR1C1Local и уже эту формулу использовать в условном форматировании.
With Application.WorksheetFunction
' =SUMPRODUCT(MAX(("2017/18"=R3)*(COLUMN(R3))))
Debug.Print .SumProduct(.Max(("2017/18" = R3) * (.Column(R3))))
End With
Помогите конвертировать Excel формулу =SUMPRODUCT(MAX(("2017/18"=R3)*(COLUMN(R3)))) в VBA выражение, что-то у меня не получается?
Добрый день, всем. Суть проблемы в следующемю Есть функция
Код
Public Function Downloading(ByVal URL As String, ByVal LocalPath As String) As Boolean
Dim ADOStream_responseBody As Variant
'Dim XMLHTTP_statusText As Variant
On Error Resume Next
If AppState.FSO.FileExists(LocalPath) Then AppState.FSO.DeleteFile LocalPath, True
If AppState.FSO.FileExists(LocalPath) Then Downloading = True: Exit Function
With CreateObject("Microsoft.XMLHTTP")
.Open "GET", Replace(URL, "\", "/"), False
.Send
If .Status = 200 Then ADOStream_responseBody = .responseBody
' XMLHTTP_statusText = .statusText
Downloading = (.Status = 200)
End With
If Downloading Then
With CreateObject("ADODB.Stream")
.Type = 1
.Open
.Write ADOStream_responseBody
.SaveToFile LocalPath, 2
.Close
End With
Else
' MsgBox "Can not download file" & Chr(13) & URL & Chr(13) & XMLHTTP_statusText & "!", vbApplicationModal + vbExclamation + vbOKOnly, "Cargill"
Downloading = False
End If
' Downloading = IIf(CBool(Downloading), LocalPath, vbNullString)
End Function
с помощью которой скачиваются файлы из Интренет, например так
Код
Public Sub test()
Downloading "https://www.gov.uk/government/uploads/system/uploads/attachment_data/file/678222/eggs-packers-01feb1...;, "C:\Tmp\0\eggs-packers-01feb18.ods"
End Sub
в самой функции скачивания возникает ошибка ("Access is denied."), которую у меня побороть не получается. Ошибка возникает на строке
Код
.Send
Так же есть следующий код
Код
#If VBA7 Then
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
#Else
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
#End If
...
URLDownloadToFile 0, "https://www.gov.uk/government/uploads/system/uploads/attachment_data/file/678222/eggs-packers-01feb18.ods&am...;, "C:\Tmp\0\eggs-packers-01feb18.ods", 0, 0
...
который, как-то выборочно работает (на моей Win7 - ok, на чужой WIN 10 - нет)
Кто-нибудь сталкивался с подобным, можете помочь? Заранее спасибо!
Добрый день! В своей работе использую Microsoft Excel (MSE) 2016. Начиная с 2016 офиса появилась возможность создавать графики в виде карт. Карты работают нормально на уровне стран и регионов. У меня возникла необходимость строить более детальные карты, например карту районов Краснодарского края или Волгоградской области. Все, что мне удалось выяснить так это то, что для постройки карты по районам можно использовать почтовые индексы. Но какие-то индексы понимаются, какие-то - нет. Есть ли у кого опыт постройки подобных детальных карт? Может быть кто знает принцип работы механизма этих карт (предполагаю, что "под капотом" bing)? Можно ли как-то узнать список (БД) поддерживаемых (известных) индексов или ... для того, чтобы строить, в частности, районные карты регионов? Заранее спасибо!
Добрый День, Всем... Название темы я написал довольно обширное, так как "чем дальше в лес тем...", чем глубже обсуждение, тем больше приложений может быть затронуто. Собственно, вопрос вот в чем. Есть такое приложение. Есть ли у кого опыт работы с ним, стоит оно своих денег или ... На данный момент больше всего мне интересно направление ускорения работы, оптимизации, но может еще какие-либо пряники найду в нем.
Всем Добрый день, хотя по проблеме с которой я столкнулся больше подойдет Здравствуйте...
Итак, есть у меня файлик xlsb размером в 1,35 Mb и вот он в один прекрасный день перестал сохраняться, на СОХРАНИТЬ или СОХРАНИТЬ КАК Excel падает. Такое происходить уже не первый раз, ранее случалось несколько месяцев назад и теперь вот сегодня, т.е. с ним (файлом) можно работать, но как только пытаешься сохранить происходит падение. Ранее я эту проблему решал просто созданием новой книги и далее методом "копипаста" переносил все из поломанной книги в новую. Но это, мягко говоря, не мой метод решения вопроса. Есть ли у кого какие идеи причин, починки и недопущения в будущем подобных эксцессов? Спасибо, Арт
Добрый день всем... Подскажите может, кто писал такое или сталкивался с подобный. Мне нужно прочитать (регулярно) читать содержимое pdf файлов. Сразу, скажу задача не на каждый день. Моя идея заключается в следующем. 1) Программно запустить на VBA Acrobat (например по аналогии с следующим кодом)
Код
Set MSW=CreateObject("Word.Application")
2) Программно нажать следующий пункт меню и после уже парсить полученный txt файл Заранее спасибо
Добрый вечер... Сегодня обнаружил для себя такой неприятный момент, как
Код
Environ$("temp")
на машинах с Win <10 выдает один результат
Код
C:\Users\UserName\AppData\Local\Temp
а на машинах c Win=10
Код
C:\Users\UserName\AppData\Local\Temp\N
где N может быть различным. Кто-нибудь сталкивался с этим? Далее с помощью вот этой нехитрой функции
Код
Public Function Downloading(ByVal URL As String, ByVal LocalPath As String) As Boolean
Dim ADOStream_responseBody As Variant
Dim XMLHTTP_statusText As Variant
On Error Resume Next
If AppState.FSO.FileExists(LocalPath) Then AppState.FSO.DeleteFile LocalPath, True
If AppState.FSO.FileExists(LocalPath) Then Downloading = True: Exit Function
With CreateObject("Microsoft.XMLHTTP")
.Open "GET", Replace(URL, "\", "/"), "False"
.Send
If .Status = 200 Then ADOStream_responseBody = .responseBody
XMLHTTP_statusText = .statusText
Downloading = (.Status = 200)
End With
If Downloading Then
With CreateObject("ADODB.Stream")
.Type = 1
.Open
.Write ADOStream_responseBody
.SaveToFile LocalPath, 2
.Close
End With
Else
' MsgBox "Can not download file" & Chr(13) & URL & Chr(13) & XMLHTTP_statusText & "!", vbApplicationModal + vbExclamation + vbOKOnly, "Cargill"
Downloading = False
End If
' Downloading = IIf(CBool(Downloading), LocalPath, vbNullString)
End Function
которая "тысячу лет" работала без проблем пытаюсь скачать файл в одну из подпапок Environ$("temp") и получаю Err.Description = "Write to file failed" Err.Number = 3004 и это только с машинами на которых стоит Windows 10????
Добрый день... Подскажите пожалуйста вот такой вопрос. Делаю запрос на VBA. Делаю следующее
Код
With CreateObject("ADODB.Connection")
.Open "Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};ReadOnly=True;DBQ=" & SourceFullFilePath & ";"
TSQL = "SELECT F1 AS WDate,F3 AS BE,F4 AS BG,F6 AS CZ,F8 AS DK,F10 AS DE,F11 AS EE,F12 AS GR,F13 AS ES,F14 AS FR,F15 AS HR,F17 AS IE,F18 AS IT,F19 AS CY,F20 AS LV,F22 AS LT,F25 AS HU,F27 AS MT,F28 AS NL,F29 AS AT,F30 AS PL,F32 AS PT,F33 AS RO,F35 AS SI,F36 AS SK,F37 AS FI,F38 AS SE,F40 AS UK,F43 AS EU FROM [" & PxSheetName & "$" & "A15:AQ50000" & "] in '" & SourceFullFilePath & "'[Excel 12.0;HDR=NO;] WHERE (F1 IS NOT NULL) ORDER BY F1"
With .Execute(TSQL) ' Здесь возникает ошибка
...
.Close
End With
.Close
End With
Получаю
Код
"[Microsoft][ODBC Excel Driver] Selected collating sequence not supported by the operating system."
Причем если повторно пройти строку, где открывается Recordset дальше можно выполнять код. Подскажите как поборость данную ошибку? Спасибо
Доброе утро. Нужна ваша помощь/совет вот в каком вопросе... Есть данные в виде двумерного массива
Код
Dim DataToDB(1 To 500000, 1 To 4) As String
Есть функция, которая справляется с задачей заталкивания этого массива в БД (в данном случае массив в MS Excel, а БД в MS Access)
Код
Public Function PushDataToCometDB(TSQL As String, TmpData() As String, ArrayDepth As Long) As String
Dim Rng As String
Dim TmpFileName As String
If ArrayDepth <= 1 Then Exit Function
With CreateObject("Excel.Application")
.Visible = False
TmpFileName = Environ$("Temp") & "\" & AppState.FSO.GetBaseName(AppState.FSO.GetTempName()) & ".xlsx"
.workbooks.Add
.sheets(1).Name = "Tmp"
Rng = .sheets(1).Name & "$" & .ConvertFormula("R1C1:R" & ArrayDepth & "C" & UBound(TmpData, 2), -4150, 1, 4)
.sheets("Tmp").Range(.sheets("Tmp").Cells(1, 1), .sheets("Tmp").Cells(ArrayDepth, UBound(TmpData, 2))) = TmpData()
.activeworkbook.Close FileName:=TmpFileName, SaveChanges:=True
.Quit
End With
AppState.Acc.Execute Replace(TSQL, "[Tbl]", " [Excel 8.0;DATABASE=" & TmpFileName & "].[Tmp$A1:D519]")
If AppState.FSO.FileExists(TmpFileName) Then AppState.FSO.DeleteFile TmpFileName, True
' MSETmpFile = "[Excel 8.0;DATABASE=" & TmpFileName & "].[" & Rng & "]"
End Function
Ниже пример вызова этой функции
Код
PushDataToCometDB "INSERT INTO AnPrPx (PxDate,PxProduct,PxCountry,PxValue) SELECT PxDate,PxProduct,PxCountry,PxValue FROM [Tbl] AS HS", DataToDB(), j
Вопрос: Поделитесь идеями можно ли именнона VBA и как можно сделать вставку этого массива но в БД MS SQL примерно таким же способом, т.е. "одной инструкцией INSERT", а не позаписьно индивидуальными INSERT'ами???? При этом у меня есть существенное ограничение в том, что я не могу выложить подготовленный excel;csv;... файл на "съедение" MS SQL (и использовать что-то типа openrowset, bcp, и т.д.). Заранее спасибо!
Добрый день, Всем... Подскажите пожалуйста как можно получить с помощью VBA имя модуля и/или процедуры, которая выполняется на текущий момент? Если это в принципе возможно, спасибо заранее
Доброго дня всем... Я пытаюсь сделать/найчиться делать интерактивные риббоны, но пока безуспешно, прошу вашей помощи... Итак, во вложении файл. Я хочу, чтобы конпка ленты выключалась/включалась по какому-то событию, например, пусть это будет выбор листа. Если это Sheet1 активен, то кнопка должна быть активной, если Sheet2 - выключена. Заранее балгодарен P.S. что-то файл с примером никак не удается загрузить, хотя он всего-то 14Kb
Добрый день, Всем Задача состоит в следующем : в ячейку добавить коммент-рисунок
Код
Dim R As Range
R.AddComment
R.Comment.Shape.Fill.UserPicture "C:\Tmp\1.png"
Таким образом рисунок добавляется, но есть один момент который у меня не получается победить. Мне нужно, чтобы размер Shape'а автоматически подстраивался под размер рисунка. Я понимаю, что нужно подкрутить следующие параметры 1) Lock picture aspect ratio 2) Relative to original picture size 3) Scale.Height 4) Scale.Width И сделать это руками/мышкой я могу, а вот на VBA не получается? Заранее спасибо...
Добрый день... Итак, собственно, проблема-задача состоит в следующем. Есть такой источник информации как rp5.ru (более конкретно ссылка http://rp5.ru/Weather_archive_in_Moscow). На данный момент у меня сделана обработка уже скачанных xls файлов на VBA в Excel. Но очень бы хотелось cделать формирование/скачивание файлов в автоматическом режиме, т.е. например пользователь в Excel указывал 1) Код станции (WMO ID) 2) диапазон дат (Data range) 3) Все дни (all days) 4) Формат (xls) нажимал кнопку на листе Excel, и файл с данными скачивался на локальный диск, дальше уже дело техники. Думаю, что это возможно и наиболее просто сделать на JS, но ранее я подобного не делал и на примере этой задачи я хотел бы набраться опыта в данном направлении...
P.S. Запускать JS код из VBA, а так же передавать параметра в/из JS я умею....
Буду благодарен за любые идеи и/или примеры кода, если подобное кому-то уже удавалось автоматизировать.
Добрый день... Помогите пожалуйста в с формулой и/или подскажите идею как сделать (не через VBA). Итак, есть массив данных R2C3:R3C22 (cоздал именовынный диапазон DS). В ячейках строки 3 пользователь вводит данные (сезон), например как в R3C26, мне нужно чтобы в ячейке выше R2C26 был доступен список из дат соответствующих этому сезону. В данном примере пользователь должен выбирать только из 07.11.16, 08.11.16 и 09.11.16? Заранее, спасибо!
Задача: В опеределенной заранее известной строке листе пробиты даты, причем в виду пользовательской "ответственности" в этой же строке может быть все, что угодно. Необходимо: Найти столбец (его номер), в котором находится дата (переданная через параметр) на VBA. Мое решение следующее
Добрый день... Занимаюсь изготовлением шаблона для определенного вида графиков на базе следующего примера Пример Рассчеты разобрал (понял) борюсь с графиком, точнее его построением. Пытаюсь построить самостоятенльно, получается так как на рис 1 а если копирую из примера по ссылке и подставляю теже именованные диапазоны в качестве источников для серий, то получается так как на рис 2
Помогите, где и что необходимо подкрутить, чтобы сделать из первого похожий на второй (интересует не результат не готовый график, а именно технология изготовления (процесс настройки, что я делаю не так или недоделываю))??? Более того если я, редактирую второй (уже готовый, он в какой-то момент слетает и превращается в первый). Превращение заключается в том, что надписи по обоим сторонам графика (как на рис 2) сбиваются в одну сторону как на рис 1. Моя рабочая лошадка Excel 2k13.
Добрый день... Занимаюсь изготовлением шаблона для определенного вида графиков на базе следующего примера MSE Chart Sankeys Рассчеты разобрал (понял) борюсь с графиком, точнее его построением. Пытаюсь построить самостоятнльно получается так как на рис 1 а если копирую из примера по ссылке и подставляю теже именованные диапазоны в качестве источников для серий, то получается вот так как на рис 2 Помогите, где и что необходимо подкрутить, чтобы сделать из первый чарт похожий на второй???
Более того если я, редактирую второй (уже готовый чарт, он в какой-то момент слетает и превращается в первый)