Jacek Kaliński

Jacek Kaliński Zarządzanie energią
| Usprawnianie prac
biurowych

Temat: Wybór daty na stronie internetowej

Dzień dobry.

Potrzebuję pomocy w zakresie możliwości wyboru daty poprzez odpowiedni kod VBA.

Strona z której pobierałbym dane po uprzednim ustawieniu daty to: http://www.pse.pl/index.php?dzid=83

Na samym dole są "Notowania archiwalne". Należy wybrać dzień i spowodować pokazanie notowań.

Ma ktoś na to jakiś pomysł?

Za wszelkie podpowiedzi serdecznie dziękuję.
Tomasz Gryzio

Tomasz Gryzio Dyrektor
zarządzający/Trener/
Konsultant - It
School

Temat: Wybór daty na stronie internetowej

Witam,
Sposobów podejścia do tego zadania jest co najmniej naście.
Wykorzystam poniżej metodę opartą na wbudowanej w Excela możliwości odpytywania sieci Web.
1. Nagrywam makro wykonujące zapytanie (https://support.office.com/en-gb/article/Get-external-d... rozdzał Create and edit a Web query) do strony:
http://www.pse.pl/index.php?dzid=83
zaznaczając tabelę z danymi.

Dostaję kod:

Sub sTGTableQueryWitPostData1()
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.pse.pl/index.php?dzid=83", Destination:=Range("$A$2"))
.Name = "index.php?dzid=83"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = False
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "1"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
End Sub

2. Widzę, że dane określające dzień, miesiąc i rok przesyłane są między stronami drogą POST w zmiennych kiedy_d, kiedy_m, kiedy_r - a wiem to z modułu deweloperskiego wbudowanego w Firefoxa:
Obrazek
oraz
3. Modyfikuję kod nagrany dodając obsługę błędów, odczytanie daty z komórki A1 ORAZ wysłanie danych metodą POST:

Sub sTGTableQueryWitPostData1()
On Error GoTo Err_sTGTableQueryWitPostData1
Dim dtData As Date
dtDate = Range("a1")
With ActiveSheet.QueryTables.Add(Connection:= _
"URL;http://www.pse.pl/index.php?dzid=83", Destination:=Range("$A$2"))
.Name = "index.php?dzid=83"
.PostText = "kiedy_d=" & Day(dtDate) & "&kiedy_m=" & Month(dtDate) & "&kiedy_r=" & Year(dtDate) & "&Submit=pokaż+notowania"
.FieldNames = True
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = True
.RefreshOnFileOpen = False
.BackgroundQuery = True
.RefreshStyle = xlInsertDeleteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = False
.RefreshPeriod = 0
.WebSelectionType = xlSpecifiedTables
.WebFormatting = xlWebFormattingNone
.WebTables = "1"
.WebPreFormattedTextToColumns = True
.WebConsecutiveDelimitersAsOne = True
.WebSingleBlockTextImport = False
.WebDisableDateRecognition = False
.WebDisableRedirections = False
.Refresh BackgroundQuery:=False
End With
Exit Sub
Err_sTGTableQueryWitPostData1:
Range("a2:" & ActiveCell.SpecialCells(xlLastCell).Address).Delete
MsgBox "...:("
End Sub


Uzyskany kod po uruchomieniu w arkuszu aktywnym wstawi wynik kwerendy do sieci web odpytującej stronę wysyłając do niej dane za pomocą POST - gdzie dane to trzy zmienne, których wartości pochodzą z daty umieszczonej w komórce A1 (domyślna postać daty to RRRR-MM-DD)
(odświeżenie kwerendy nie odczyta ponownie komórki A1 - odświeży dane dla daty użytej w momencie wstawienia kwerendy).
Pozdrawiam!
Jacek Kaliński

Jacek Kaliński Zarządzanie energią
| Usprawnianie prac
biurowych

Temat: Wybór daty na stronie internetowej

Bardzo dziękuję za pomoc !!! :)

Działa tak jak tego chciałem.

Pozdrawiam

Następna dyskusja:

Formaty daty




Wyślij zaproszenie do