Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
power query. Выгрузка из модели данных с нарезкой по 1 млн строк.
 
Добрый день. Немного программирую на VBA на работе в лично-рабочих целях для облегчения труда так сказать.
Ситуация состоит в следующем. Дали большой .txt  на 5,3 млн строк для проведения анализа. Я его загнал в power query, получил таблицу в модели данных без выгрузки на лист.
Далее из модели вывожу в сводную. Как бы все просто и понятно, но при определенных ситуациях не выводит, т.к. не хватает места на листе ( 1 млн строк.), т.е. потенциальная сводная будет иметь например, 2,1 млн строк.

У меня возник вопрос. Можно ли средствами VBA (макросом) обратиться к модели данных по типу как к Range  (dim .... as .... set .... = ....) и например потом в цикле выводить на лист 1 млн строк., при превышении 1 млн строк создать новый лист и лить уже туда и т.д.
Я не знаю как обратиться к таблице, которая в модели данных и можно ли это в принципе.

или в самом power query есть что-то для решения этой задачи.

Если посмотреть широко, то получается, что мне нужно порезать и превратить .txt в 5,3 млн строк построчно в отдельные файлы или листы одного файла .xlsx по 1 млн строк средствами VBA, power query.  Причем .txt находится в модели данных power query.
Не срабатывает Click для выбор элемента списка <Li
 
Не пойму что не так. Должен сработать Click  и закрыться окно iframe. Смотрите 68-ю строку  F_Li.Click. Файл пример прикреплен.
Код
Private Sub CommandButton5_Click()

Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
apiShowWindow IE.hwnd, 3   ' если вместо 11 ставим 3 то IE будет на весь экран
IE.navigate ("http://se.fedresurs.ru/messages/IsSearching")
Do While (IE.readyState <> 4) And (IE.readyState <> 3): DoEvents: Loop  ' ждем окончания загрузки
While IE.document Is Nothing: DoEvents: Wend
Application.Wait (Now + TimeValue("0:00:3"))  'делаем паузу
Dim Doc As HTMLDocument
Set Doc = IE.document

'Открываем окно <iframe
Dim VseImg_Elements As IHTMLElementCollection
Dim VImg As IHTMLElement
Set VseImg_Elements = Doc.getElementsByTagName("img")
ImgTipMessage = "ctl00_MainContent_sfMessageType_imgSelect"
For Each VImg In VseImg_Elements
  If VImg.ID = ImgTipMessage Then
    VImg.Click
    Exit For
  End If
Next VImg

Do While (IE.readyState <> 4) And (IE.readyState <> 3): DoEvents: Loop  ' ждем окончания загрузки
Application.Wait (Now + TimeValue("0:00:3"))  'делаем паузу

' определяем документ фрейма
Dim DocIframe As HTMLDocument
Set DocIframe = Doc.frames(0).document

'находим строку ввода
Dim F_VseInput_Elements As IHTMLElementCollection
Dim F_VInp As IHTMLElement
Set F_VseInput_Elements = DocIframe.getElementsByTagName("input")
For Each F_VInp In F_VseInput_Elements
  If F_VInp.ID = "ctl00_MainContent_tbSearch" Then
    F_VInp.Value = "Намерение должника обратиться в суд с заявлением о банкротстве"
    Exit For
  End If
Next F_VInp
Application.Wait (Now + TimeValue("0:00:3"))  'делаем паузу

'нажимаем кнопку Поиск
For Each F_VInp In F_VseInput_Elements
  If F_VInp.ID = "ctl00_MainContent_btnSearch" Then
    F_VInp.Click
    Exit For
  End If
Next F_VInp
Application.Wait (Now + TimeValue("0:00:3"))  'делаем паузу

'определяем все div страницы фрейм
Dim F_VseDiv_Elements As IHTMLElementCollection
Dim F_VDiv As IHTMLElement
Dim F_Li As IHTMLElement
Set F_VseDiv_Elements = DocIframe.getElementsByTagName("div")

'находим конкретный div строки "Намерение должника обратиться в суд с заявлением о банкротстве"
' по критерию уникальное имя класса rtMid rtSelected
For Each F_VDiv In F_VseDiv_Elements
  If F_VDiv.className = "rtMid rtSelected" Then
    MsgBox "Нашли"
    ' переходим на родителя Li
    Set F_Li = F_VDiv.parentElement
    MsgBox F_Li.innerText ' проверяем на того ли родителя попали
    F_Li.Click ' пытаемся нажать на Li типа выбрать элемент Li
               ' соответствующий "Намерение должника обратиться в суд с заявлением о банкротстве"
    Exit For
  End If
Next F_VDiv
  
End Sub
Изменено: puuh - 27.03.2019 10:01:00
[ Закрыто] Как ввести данные в поля появляющегося окна/формы HTML, На сайте открывается окно\форма. Не знаю как добраться до ввода\выбора значений.
 
                 Открываю сайт. Программно открываю окно для выбора значений. Например внутри списка "Банкротство и исполнительное производство" нужно выбрать "Намерение должника обратиться...." После выбора форма соответственно закрывается.
                     Как я понимаю в тело HTML дописываются некоторые вещи скриптом. Это окно как я понял является формой. Опять же как я понимаю чтобы добраться до конкретных <input, <а, <div этой формы нужно как-то к ней добраться, а уж потом к прочим внутренним вещам формы. Как? В теле HTML нахожу две <form, но коллекция выдает только одну, а мне нужна вторая, т.к. именно там строки, которые нужно выбрать.
Код
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
apiShowWindow IE.hwnd, 3   ' если вместо 11 ставим 3 то IE будет на весь экран
IE.navigate ("http://se.fedresurs.ru/messages/IsSearching")
Do While (IE.readyState <> 4) And (IE.readyState <> 3): DoEvents: Loop  ' ждем окончания загрузки
While IE.document Is Nothing: DoEvents: Wend
Application.Wait (Now + TimeValue("0:00:5"))  'делаем паузу
Dim Doc As HTMLDocument
Set Doc = IE.document

Dim VseImg_Elements As IHTMLElementCollection
Dim VImg As IHTMLElement
Set VseImg_Elements = Doc.getElementsByTagName("img")
ImgTipMessage = "ctl00_MainContent_sfMessageType_imgSelect"
For Each VImg In VseImg_Elements
  If VImg.ID = ImgTipMessage Then
    VImg.Click
    Exit For
  End If
Next VImg


' Далее надо добираться до <li формы
Сохранить файл программно управляя окном IE "Сохранение" из VBA Excel
 

Проблема выросла из следующего. Была задача сохранения .pdf файла с сайта http://ras.arbitr.ru/. При использовании способов через URLDownloadToFile или WinHttp.WinHttpRequest задачу решить не получилось. Файлы скачивались "битые". Просмотреть их на компе не удавалось.

Убрав все лишнее из вышеуказанных способов выяснилось, что для любых других URL файлы .pdf скачиваются и просматриваются на компе нормально, а вот с сайта http://ras.arbitr.ru/ нет. Также выяснил, что если открыть файл .pdf в IE, а потом сохранить его через окно сохранения (Сtrl+Shft+s), то все номально. Вот и возникла необходимость вот так через мягкое место сделать програмку.

Как я понял необходимо пользоваться FindWindowEx. В инете есть описания, но мозаику сложить не могу. Мозг уже кипит. Прошу помощь.

Необходимо с использованием VBA сделать следующее:

1.           Открыть в IE .pdf файл по конкретной ссылке.

2.           Открыть окно сохранения в IE.

3.           В поле ввода "Имя файла" вставить конкретный путь и наименование файла "e:\111.pdf".

4.           Программно нажать кнопку "Сохранить", чтобы окно закрылось.

Код
Private Declare Function apiShowWindow Lib "user32" Alias "ShowWindow" _
            (ByVal Hwnd As Long, ByVal nCmdShow As Long) As Long

Private Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
        
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
                                     (ByVal hWnd1 As Long, _
                                      ByVal hWnd2 As Long, _
                                      ByVal lpsz1 As String, _
                                      ByVal lpsz2 As String) _
                                      As Long

Private Sub CommandButton1_Click()

  Dim IE1 As InternetExplorer
  Set IE1 = New InternetExplorer
  IE1.Visible = True
  apiShowWindow IE1.Hwnd, 3
  IE1.navigate "http://kad.arbitr.ru/PdfDocument/4718462b-4ceb-408d-b92d-4fa111acec1b/0e6d3992-f771-4e09-9301-24e891...;
  Do While (IE1.readyState <> 4) And (IE1.readyState <> 3): DoEvents: Loop
  While IE1.document Is Nothing: DoEvents: Wend
  Application.Wait (Now + TimeValue("0:00:5"))
  SendKeys ("^+s")

MsgBox "Закипаю!!!!! АААААААААААААААААААААА!!!!!!"

End Sub
getElementsByClassName не находит теги <a class=... на странице HTML, А ОНИ ЕСТЬ
 
 Вроде все просто.
1. Открыли страницу.
2. Вставили название организации.
3. Нажали - найти.
4. Загрузилась страница результатов поиска.
5. Уточняемся. В том смысле что ищем и нажимаем ссылку <a href="…." class="actye">действующие (92)</a>

а вот и нет  
Doc.getElementsByClassName("actye") не находит, а ссылка есть

Пытался искать через Doc.getElementsByTagName("a")
так ощущение, что там все ссылки (<a) с предыдущей страницы ...  т.е. страницы перед нажатием "Найти", а не с текущей.

Код
'------открываем страницу IE------
Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
apiShowWindow IE.hwnd, 3   ' если вместо 11 ставим 3 то IE будет на весь экран
IE.navigate ("http://www.rusprofile.ru")
Do While (IE.readyState <> 4) And (IE.readyState <> 3): DoEvents: Loop  ' ждем окончания загрузки
Application.Wait (Now + TimeValue("0:00:3"))  'делаем паузу
Dim Doc As HTMLDocument
Set Doc = IE.document

Dim VseInput As IHTMLElementCollection
Set VseInput = Doc.getElementsByTagName("input")  ' определяем все инпуты

'------------------переходим к вставке названия организации------------------
For Each VI In VseInput
  If VI.getAttribute("placeholder") = "Поиск по ОГРН, ИНН, названию, ФИО директора и адресу" Then
    VI.Select
    VI.Value = "комбинат" 'TabIshExcel.Cells(i, 2).Value
    Exit For
  End If
Next VI
Application.Wait (Now + TimeValue("0:00:2"))

'------------------нажимаем кнопку найти------------------
    
 Dim NaytiBtn As IHTMLElementCollection
Set NaytiBtn = Doc.getElementsByClassName("srch-btn")
    
    NaytiBtn(0).Click
Do While (IE.readyState <> 4) And (IE.readyState <> 3): DoEvents: Loop  ' ждем окончания загрузки
Application.Wait (Now + TimeValue("0:00:4"))  'делаем паузу



'-------------- Дальше засада------------------
Dim VseA As IHTMLElementCollection
Set VseA = Doc.getElementsByClassName("actye")  ' ссылку Действующие организации
 MsgBox VseA.Length
Dim AA As IHTMLElement
For Each AA In VseA
  MsgBox AA.innerText
  If InStr(1, AA.Text, "действующие", vbTextCompare) <> 0 Then
    AA.Click
    Exit For
  End If
Next AA
Изменено: puuh - 05.03.2018 21:06:38
Переключиться на следующую страницу сайта
 
Сведения на сайте помещаются на нескольких страницах. Первая соответственно грузится сразу. Помогите дописать код, чтобы он сымитировал нажатие цифры 4 мышкой, т.е.
перешел на страницу 4.
Сам написал только вот это
Код
Private Sub CommandButton1_Click()
 Dim IE As Object
 Set IE = CreateObject("InternetExplorer.Application")
  IE.Visible = True
IE.Navigate ("http://ras.arbitr.ru")
  
Do While IE.readyState <> 4: DoEvents: Loop
 
 Dim Doc As HTMLDocument
Set Doc = IE.document
 
 
Dim INP_Elements As IHTMLElementCollection
Dim INP As IHTMLElement
Set INP_Elements = Doc.getElementsByTagName("input")
For Each INP In INP_Elements
    If INP.placeholder = "например, А50-5568/08" Then
        INP.Select
        INP.Value = "А40-16910/2014"
    End If
 
Next INP

Dim Button_Elements As IHTMLElementCollection
Dim BtnE As IHTMLElement
Set Button_Elements = Doc.getElementsByTagName("button")

Button_Elements(0).Click
'++++++++++++++++++++++++++++++++++++++++++++++++++

 
 '++++++++++++++++++++++++++++++++++++++++++++++++++
End Sub


В Excel кидаем кнопку и код соответственно вставляем внутрь.


Вроде как надо у страници 1 убрать активность
           <li class="active">
                   <a href="#page1">1</a>

а у соответственно страницы 4 ее добавить
           <li class="active">
                   <a href="#page4">1</a>

Причем поиск надо провести скорее всего по                        <a href="#page4">4</a> потом перейти к его родителю и там уже заниматься  <li class="active">.

В общем у меня в голове каша.
Выручайте.

Со всеми с кем общаюсь по заказу программ для работы с сайтами. данный пост на заказы не влияет. Заказы остаются в силе. :-)
Изменено: puuh - 24.04.2016 22:29:33
Как передать ctrl+a, ctrl+c из excel в IE
 
Я не профи. Мне нужно чтобы произошло следующее.
Имееь открытый файл excel. Имеется кнопка.

Нажимаем кнопку.
Открывается определенная страница в IE.
Происходит выделение всего (ctrl+a),
копирование (ctrl+c),
возвращение в excel,
вставка как я понимаю из буфера (ctrl+v)

Пока дошел до этого
Код
Private Sub CommandButton1_Click()
 Dim IE As Object
Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = True
  IE.Navigate ("[URL=http://www.yandex.ru]http://www.yandex.ru"[/URL])
 Do While IE.readyState <> 4
    DoEvents
Loop

IE.SendKeys "^a"  - вот эта строчка и не идет.
End Sub
Ввод значений в числовом формате с разделением разрядов
 
Ввожу цифры на листе в формате 123 123, 89 ,т.е. в формате числовой с разделением и две цифры после запятой. Надоело после ввода в обычном формате потом менять на формат с разделением. Воспользовался вот этим
Код
Private Sub Worksheet_Change(ByVal Target As Range) 
If IsNumeric(Target.Value) = True Then 
 Target.NumberFormat = "#,##0.00" 
End If 

Но это не работает для вновь открытых книг. Я добавил этот код в файл PERSONAL для лист1, но он не работает.

Подскажите, что не так?
Страницы: 1
Loading...