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:
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!