Click related to doPostBack & href in VBA












1














I was having trouble with coding and I could no longer work.



https://tradingeconomics.com/



I posted the coding logic I was working on below. I imported the excel sheet to Portugal of the countries shown on the homepage.



But,



<a id="ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_LinkButton1" class="btn-group btn-group-sm" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$LinkButton1','')">
<button type = "button" class = "btn btn-default">
<i class = "glyphicon glyphicon-plus"> </ i>
</ button>
</a>


How can I code doPostBack to finish my work here? I looked through stackoverflow homepage and tried various trial and error, but I could not finish it.



Option Explicit
Public Sub New_Listing()

Application.ScreenUpdating = False

Dim IE As New InternetExplorer
Const MAX_WAIT_SEC As Long = 5

Dim http As New MSXML2.XMLHTTP60
Dim html As New HTMLDocument
Dim ws As Worksheet
Dim sResponse0 As String
Dim g As Integer

Set http = CreateObject("MSXML2.XMLHTTP")
Set ws = ThisWorkbook.Worksheets("Sheet1")

Dim url As String

url = "https://tradingeconomics.com/"

With IE
.Visible = True
.navigate "https://tradingeconomics.com/"

While .Busy Or .readyState < 4: DoEvents: Wend
End With

Dim tarTable As HTMLTable
Dim hTable As HTMLTable

For Each tarTable In IE.document.getElementsByTagName("table")
If InStr(tarTable.ID, "ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1") <> 0 Then
Set hTable = tarTable
End If
Next

Dim startRow As Long
Dim tRow As Object, tCell As Object, tr As Object, td As Object, r As Long, c As Long

r = startRow
With ws
Set tRow = hTable.getElementsByTagName("tr")
ReDim arr0(tRow.Length - 1, 0)
For Each tr In tRow
r = r + 1
Set tCell = tr.getElementsByTagName("td")

If tCell.Length > UBound(arr0, 2) Then
ReDim Preserve arr0(tRow.Length - 1, tCell.Length)
End If

c = 1
For Each td In tCell
arr0(r - 1, c - 1) = td.innerText
c = c + 1
Next td

Next tr

Dim k As Integer
Dim i As Integer

k = 0
For i = LBound(arr0, 1) To UBound(arr0, 1)
.Cells(2 + k, 2) = arr0(i, 0)
.Cells(2 + k, 3) = arr0(i, 1)
.Cells(2 + k, 4) = arr0(i, 2)
.Cells(2 + k, 5) = arr0(i, 3)
.Cells(2 + k, 6) = arr0(i, 4)
.Cells(2 + k, 7) = arr0(i, 5)
.Cells(2 + k, 8) = arr0(i, 6)
.Cells(2 + k, 9) = arr0(i, 7)
k = k + 1
Next i
End With

With IE
.Visible = True
.document.querySelector("a.btn-group btn-group-sm[href='javascript:__doPostBack('ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$LinkButton1','')']").Click
End With

Set tRow = Nothing: Set tCell = Nothing: Set tr = Nothing: Set td = Nothing
Set hTable = Nothing: Set tarTable = Nothing

Application.ScreenUpdating = True

End Sub


I have completed my work up to Portugal, how can I fix it to get the next data, Czech Republic ?, I would be very grateful if you could give me details of how to modify the coding. I have learned vba very soon, so I have a lot of difficulties.



enter image description here










share|improve this question
























  • Are you open to using selenium basic as well?
    – QHarr
    Nov 11 at 14:44










  • Thanks to QHarr, I am learning a lot from QHarr's articles on this homepage. I have not used selenium basic yet, but I downloaded the selenium basic material to my computer. I am going to use it if I can afford to live, but now I can not afford to live. selenium basic If you study a little, you will be able to handle your work more easily, but I have a lot of things to do in the past, so I can not afford to. First of all, I will give priority to finishing things from what I already study.
    – 김기성
    Nov 11 at 14:55












  • I have given an internet explorer answer which does all the data in one go including the links.
    – QHarr
    Nov 11 at 15:12


















1














I was having trouble with coding and I could no longer work.



https://tradingeconomics.com/



I posted the coding logic I was working on below. I imported the excel sheet to Portugal of the countries shown on the homepage.



But,



<a id="ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_LinkButton1" class="btn-group btn-group-sm" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$LinkButton1','')">
<button type = "button" class = "btn btn-default">
<i class = "glyphicon glyphicon-plus"> </ i>
</ button>
</a>


How can I code doPostBack to finish my work here? I looked through stackoverflow homepage and tried various trial and error, but I could not finish it.



Option Explicit
Public Sub New_Listing()

Application.ScreenUpdating = False

Dim IE As New InternetExplorer
Const MAX_WAIT_SEC As Long = 5

Dim http As New MSXML2.XMLHTTP60
Dim html As New HTMLDocument
Dim ws As Worksheet
Dim sResponse0 As String
Dim g As Integer

Set http = CreateObject("MSXML2.XMLHTTP")
Set ws = ThisWorkbook.Worksheets("Sheet1")

Dim url As String

url = "https://tradingeconomics.com/"

With IE
.Visible = True
.navigate "https://tradingeconomics.com/"

While .Busy Or .readyState < 4: DoEvents: Wend
End With

Dim tarTable As HTMLTable
Dim hTable As HTMLTable

For Each tarTable In IE.document.getElementsByTagName("table")
If InStr(tarTable.ID, "ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1") <> 0 Then
Set hTable = tarTable
End If
Next

Dim startRow As Long
Dim tRow As Object, tCell As Object, tr As Object, td As Object, r As Long, c As Long

r = startRow
With ws
Set tRow = hTable.getElementsByTagName("tr")
ReDim arr0(tRow.Length - 1, 0)
For Each tr In tRow
r = r + 1
Set tCell = tr.getElementsByTagName("td")

If tCell.Length > UBound(arr0, 2) Then
ReDim Preserve arr0(tRow.Length - 1, tCell.Length)
End If

c = 1
For Each td In tCell
arr0(r - 1, c - 1) = td.innerText
c = c + 1
Next td

Next tr

Dim k As Integer
Dim i As Integer

k = 0
For i = LBound(arr0, 1) To UBound(arr0, 1)
.Cells(2 + k, 2) = arr0(i, 0)
.Cells(2 + k, 3) = arr0(i, 1)
.Cells(2 + k, 4) = arr0(i, 2)
.Cells(2 + k, 5) = arr0(i, 3)
.Cells(2 + k, 6) = arr0(i, 4)
.Cells(2 + k, 7) = arr0(i, 5)
.Cells(2 + k, 8) = arr0(i, 6)
.Cells(2 + k, 9) = arr0(i, 7)
k = k + 1
Next i
End With

With IE
.Visible = True
.document.querySelector("a.btn-group btn-group-sm[href='javascript:__doPostBack('ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$LinkButton1','')']").Click
End With

Set tRow = Nothing: Set tCell = Nothing: Set tr = Nothing: Set td = Nothing
Set hTable = Nothing: Set tarTable = Nothing

Application.ScreenUpdating = True

End Sub


I have completed my work up to Portugal, how can I fix it to get the next data, Czech Republic ?, I would be very grateful if you could give me details of how to modify the coding. I have learned vba very soon, so I have a lot of difficulties.



enter image description here










share|improve this question
























  • Are you open to using selenium basic as well?
    – QHarr
    Nov 11 at 14:44










  • Thanks to QHarr, I am learning a lot from QHarr's articles on this homepage. I have not used selenium basic yet, but I downloaded the selenium basic material to my computer. I am going to use it if I can afford to live, but now I can not afford to live. selenium basic If you study a little, you will be able to handle your work more easily, but I have a lot of things to do in the past, so I can not afford to. First of all, I will give priority to finishing things from what I already study.
    – 김기성
    Nov 11 at 14:55












  • I have given an internet explorer answer which does all the data in one go including the links.
    – QHarr
    Nov 11 at 15:12
















1












1








1







I was having trouble with coding and I could no longer work.



https://tradingeconomics.com/



I posted the coding logic I was working on below. I imported the excel sheet to Portugal of the countries shown on the homepage.



But,



<a id="ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_LinkButton1" class="btn-group btn-group-sm" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$LinkButton1','')">
<button type = "button" class = "btn btn-default">
<i class = "glyphicon glyphicon-plus"> </ i>
</ button>
</a>


How can I code doPostBack to finish my work here? I looked through stackoverflow homepage and tried various trial and error, but I could not finish it.



Option Explicit
Public Sub New_Listing()

Application.ScreenUpdating = False

Dim IE As New InternetExplorer
Const MAX_WAIT_SEC As Long = 5

Dim http As New MSXML2.XMLHTTP60
Dim html As New HTMLDocument
Dim ws As Worksheet
Dim sResponse0 As String
Dim g As Integer

Set http = CreateObject("MSXML2.XMLHTTP")
Set ws = ThisWorkbook.Worksheets("Sheet1")

Dim url As String

url = "https://tradingeconomics.com/"

With IE
.Visible = True
.navigate "https://tradingeconomics.com/"

While .Busy Or .readyState < 4: DoEvents: Wend
End With

Dim tarTable As HTMLTable
Dim hTable As HTMLTable

For Each tarTable In IE.document.getElementsByTagName("table")
If InStr(tarTable.ID, "ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1") <> 0 Then
Set hTable = tarTable
End If
Next

Dim startRow As Long
Dim tRow As Object, tCell As Object, tr As Object, td As Object, r As Long, c As Long

r = startRow
With ws
Set tRow = hTable.getElementsByTagName("tr")
ReDim arr0(tRow.Length - 1, 0)
For Each tr In tRow
r = r + 1
Set tCell = tr.getElementsByTagName("td")

If tCell.Length > UBound(arr0, 2) Then
ReDim Preserve arr0(tRow.Length - 1, tCell.Length)
End If

c = 1
For Each td In tCell
arr0(r - 1, c - 1) = td.innerText
c = c + 1
Next td

Next tr

Dim k As Integer
Dim i As Integer

k = 0
For i = LBound(arr0, 1) To UBound(arr0, 1)
.Cells(2 + k, 2) = arr0(i, 0)
.Cells(2 + k, 3) = arr0(i, 1)
.Cells(2 + k, 4) = arr0(i, 2)
.Cells(2 + k, 5) = arr0(i, 3)
.Cells(2 + k, 6) = arr0(i, 4)
.Cells(2 + k, 7) = arr0(i, 5)
.Cells(2 + k, 8) = arr0(i, 6)
.Cells(2 + k, 9) = arr0(i, 7)
k = k + 1
Next i
End With

With IE
.Visible = True
.document.querySelector("a.btn-group btn-group-sm[href='javascript:__doPostBack('ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$LinkButton1','')']").Click
End With

Set tRow = Nothing: Set tCell = Nothing: Set tr = Nothing: Set td = Nothing
Set hTable = Nothing: Set tarTable = Nothing

Application.ScreenUpdating = True

End Sub


I have completed my work up to Portugal, how can I fix it to get the next data, Czech Republic ?, I would be very grateful if you could give me details of how to modify the coding. I have learned vba very soon, so I have a lot of difficulties.



enter image description here










share|improve this question















I was having trouble with coding and I could no longer work.



https://tradingeconomics.com/



I posted the coding logic I was working on below. I imported the excel sheet to Portugal of the countries shown on the homepage.



But,



<a id="ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_LinkButton1" class="btn-group btn-group-sm" href="javascript:__doPostBack('ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$LinkButton1','')">
<button type = "button" class = "btn btn-default">
<i class = "glyphicon glyphicon-plus"> </ i>
</ button>
</a>


How can I code doPostBack to finish my work here? I looked through stackoverflow homepage and tried various trial and error, but I could not finish it.



Option Explicit
Public Sub New_Listing()

Application.ScreenUpdating = False

Dim IE As New InternetExplorer
Const MAX_WAIT_SEC As Long = 5

Dim http As New MSXML2.XMLHTTP60
Dim html As New HTMLDocument
Dim ws As Worksheet
Dim sResponse0 As String
Dim g As Integer

Set http = CreateObject("MSXML2.XMLHTTP")
Set ws = ThisWorkbook.Worksheets("Sheet1")

Dim url As String

url = "https://tradingeconomics.com/"

With IE
.Visible = True
.navigate "https://tradingeconomics.com/"

While .Busy Or .readyState < 4: DoEvents: Wend
End With

Dim tarTable As HTMLTable
Dim hTable As HTMLTable

For Each tarTable In IE.document.getElementsByTagName("table")
If InStr(tarTable.ID, "ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1") <> 0 Then
Set hTable = tarTable
End If
Next

Dim startRow As Long
Dim tRow As Object, tCell As Object, tr As Object, td As Object, r As Long, c As Long

r = startRow
With ws
Set tRow = hTable.getElementsByTagName("tr")
ReDim arr0(tRow.Length - 1, 0)
For Each tr In tRow
r = r + 1
Set tCell = tr.getElementsByTagName("td")

If tCell.Length > UBound(arr0, 2) Then
ReDim Preserve arr0(tRow.Length - 1, tCell.Length)
End If

c = 1
For Each td In tCell
arr0(r - 1, c - 1) = td.innerText
c = c + 1
Next td

Next tr

Dim k As Integer
Dim i As Integer

k = 0
For i = LBound(arr0, 1) To UBound(arr0, 1)
.Cells(2 + k, 2) = arr0(i, 0)
.Cells(2 + k, 3) = arr0(i, 1)
.Cells(2 + k, 4) = arr0(i, 2)
.Cells(2 + k, 5) = arr0(i, 3)
.Cells(2 + k, 6) = arr0(i, 4)
.Cells(2 + k, 7) = arr0(i, 5)
.Cells(2 + k, 8) = arr0(i, 6)
.Cells(2 + k, 9) = arr0(i, 7)
k = k + 1
Next i
End With

With IE
.Visible = True
.document.querySelector("a.btn-group btn-group-sm[href='javascript:__doPostBack('ctl00$ContentPlaceHolder1$defaultUC1$CurrencyMatrixAllCountries1$LinkButton1','')']").Click
End With

Set tRow = Nothing: Set tCell = Nothing: Set tr = Nothing: Set td = Nothing
Set hTable = Nothing: Set tarTable = Nothing

Application.ScreenUpdating = True

End Sub


I have completed my work up to Portugal, how can I fix it to get the next data, Czech Republic ?, I would be very grateful if you could give me details of how to modify the coding. I have learned vba very soon, so I have a lot of difficulties.



enter image description here







html vba web-scraping






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 11 at 15:17









QHarr

29.8k81841




29.8k81841










asked Nov 11 at 14:23









김기성

225




225












  • Are you open to using selenium basic as well?
    – QHarr
    Nov 11 at 14:44










  • Thanks to QHarr, I am learning a lot from QHarr's articles on this homepage. I have not used selenium basic yet, but I downloaded the selenium basic material to my computer. I am going to use it if I can afford to live, but now I can not afford to live. selenium basic If you study a little, you will be able to handle your work more easily, but I have a lot of things to do in the past, so I can not afford to. First of all, I will give priority to finishing things from what I already study.
    – 김기성
    Nov 11 at 14:55












  • I have given an internet explorer answer which does all the data in one go including the links.
    – QHarr
    Nov 11 at 15:12




















  • Are you open to using selenium basic as well?
    – QHarr
    Nov 11 at 14:44










  • Thanks to QHarr, I am learning a lot from QHarr's articles on this homepage. I have not used selenium basic yet, but I downloaded the selenium basic material to my computer. I am going to use it if I can afford to live, but now I can not afford to live. selenium basic If you study a little, you will be able to handle your work more easily, but I have a lot of things to do in the past, so I can not afford to. First of all, I will give priority to finishing things from what I already study.
    – 김기성
    Nov 11 at 14:55












  • I have given an internet explorer answer which does all the data in one go including the links.
    – QHarr
    Nov 11 at 15:12


















Are you open to using selenium basic as well?
– QHarr
Nov 11 at 14:44




Are you open to using selenium basic as well?
– QHarr
Nov 11 at 14:44












Thanks to QHarr, I am learning a lot from QHarr's articles on this homepage. I have not used selenium basic yet, but I downloaded the selenium basic material to my computer. I am going to use it if I can afford to live, but now I can not afford to live. selenium basic If you study a little, you will be able to handle your work more easily, but I have a lot of things to do in the past, so I can not afford to. First of all, I will give priority to finishing things from what I already study.
– 김기성
Nov 11 at 14:55






Thanks to QHarr, I am learning a lot from QHarr's articles on this homepage. I have not used selenium basic yet, but I downloaded the selenium basic material to my computer. I am going to use it if I can afford to live, but now I can not afford to live. selenium basic If you study a little, you will be able to handle your work more easily, but I have a lot of things to do in the past, so I can not afford to. First of all, I will give priority to finishing things from what I already study.
– 김기성
Nov 11 at 14:55














I have given an internet explorer answer which does all the data in one go including the links.
– QHarr
Nov 11 at 15:12






I have given an internet explorer answer which does all the data in one go including the links.
– QHarr
Nov 11 at 15:12














2 Answers
2






active

oldest

votes


















1














Internet Explorer



Here with IE - get's all results (the whole World) in one go including links.



Condition based wait with timeout:



Option Explicit
Public Sub GetInfo()
Dim IE As New InternetExplorer, ws As Worksheet, clipboard As Object, t As Date
Const MAX_WAIT_SEC As Long = 5
Const URL = "https://tradingeconomics.com/"

Set ws = ThisWorkbook.Worksheets("Sheet1")
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

With IE
.Visible = True
.navigate URL

While .Busy Or .readyState < 4: DoEvents: Wend

With .document
.querySelector("[value=world]").Selected = True
.querySelector("select").FireEvent "onchange"
t = Timer
Do
DoEvents
If Timer - t > MAX_WAIT_SEC Then Exit Do
Loop While .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_ParameterContinent").Value <> "world"

clipboard.SetText .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").outerHTML
clipboard.PutInClipboard
End With
.Quit
ws.Cells(1, 1).PasteSpecial
End With
End Sub


Explicit wait based:



Option Explicit

Public Sub GetInfo()
Dim IE As New InternetExplorer, ws As Worksheet, clipboard As Object
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
Const URL = "https://tradingeconomics.com/"
With IE
.Visible = True
.navigate URL

While .Busy Or .readyState < 4: DoEvents: Wend

With .document
.querySelector("[value=world]").Selected = True
.querySelector("select").FireEvent "onchange"

Application.Wait Now + TimeSerial(0, 0, 5)

clipboard.SetText .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").outerHTML
clipboard.PutInClipboard
End With
.Quit
ws.Cells(1, 1).PasteSpecial
End With
End Sub




Selenium basic



This is easy enough using selenium basic and allowing enough time for the postBack to update the page. After selenium basic install add reference via VBE> Tools > References > Selenium Type Library. More selenium info [here]. The below gets all the World data in one go.



Option Explicit

Public Sub GetInfo()
Dim d As WebDriver, ws As Worksheet, clipboard As Object
Set d = New ChromeDriver
Set ws = ThisWorkbook.Worksheets("Sheet1")
Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
Const URL = "https://tradingeconomics.com/"

With d
.Start "Chrome"
.get URL
.FindElementByCss("[value=world]").Click

Application.Wait Now + TimeSerial(0, 0, 5)

clipboard.SetText .FindElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").Attribute("outerHTML")
clipboard.PutInClipboard
.Quit
ws.Cells(1, 1).PasteSpecial
End With
End Sub





share|improve this answer























  • Wow ... your coding output is amazing. IE coding is really good. And then .. I just installed the Selenium basic on my computer and tried to use your coding results. I checked the Selenium Type Library, but I get an error. 33 runtime err. SessionNotCreatedError session not created exception from unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData": {frameid ":" 21828B311DAD0D41D57FF8B55301D1CA , "isDefau (Session info: chrome = 70.0.3538.102)
    – 김기성
    Nov 11 at 15:38










  • Not sure but start by checking through the list of requirements and issues in the second link in my selenium answer; where it says here. If after that still a problem let me know and I will see what we can do.
    – QHarr
    Nov 11 at 15:42





















2














The Czech Republic value is part of a values set which is returned from the server after clicking a button in the web page itself, you'll have to simulate a click on this button by the VBA code, wait for IE to fetch the result and then continue with your code:



As this is the HTML of the button for fetching the next set of values:



<button type="button" class="btn btn-default">...


Use this to simulate a click and wait for the result fetched:



IE.document.getElementsByClassName("btn-default")(0).Click
Application.Wait(Now + TimeValue("0:00:05"))


After it you will be able to read the Czech Republic and the next set of values by the VBA code.






share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53249654%2fclick-related-to-dopostback-href-in-vba%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    2 Answers
    2






    active

    oldest

    votes








    2 Answers
    2






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    1














    Internet Explorer



    Here with IE - get's all results (the whole World) in one go including links.



    Condition based wait with timeout:



    Option Explicit
    Public Sub GetInfo()
    Dim IE As New InternetExplorer, ws As Worksheet, clipboard As Object, t As Date
    Const MAX_WAIT_SEC As Long = 5
    Const URL = "https://tradingeconomics.com/"

    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

    With IE
    .Visible = True
    .navigate URL

    While .Busy Or .readyState < 4: DoEvents: Wend

    With .document
    .querySelector("[value=world]").Selected = True
    .querySelector("select").FireEvent "onchange"
    t = Timer
    Do
    DoEvents
    If Timer - t > MAX_WAIT_SEC Then Exit Do
    Loop While .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_ParameterContinent").Value <> "world"

    clipboard.SetText .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").outerHTML
    clipboard.PutInClipboard
    End With
    .Quit
    ws.Cells(1, 1).PasteSpecial
    End With
    End Sub


    Explicit wait based:



    Option Explicit

    Public Sub GetInfo()
    Dim IE As New InternetExplorer, ws As Worksheet, clipboard As Object
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    Const URL = "https://tradingeconomics.com/"
    With IE
    .Visible = True
    .navigate URL

    While .Busy Or .readyState < 4: DoEvents: Wend

    With .document
    .querySelector("[value=world]").Selected = True
    .querySelector("select").FireEvent "onchange"

    Application.Wait Now + TimeSerial(0, 0, 5)

    clipboard.SetText .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").outerHTML
    clipboard.PutInClipboard
    End With
    .Quit
    ws.Cells(1, 1).PasteSpecial
    End With
    End Sub




    Selenium basic



    This is easy enough using selenium basic and allowing enough time for the postBack to update the page. After selenium basic install add reference via VBE> Tools > References > Selenium Type Library. More selenium info [here]. The below gets all the World data in one go.



    Option Explicit

    Public Sub GetInfo()
    Dim d As WebDriver, ws As Worksheet, clipboard As Object
    Set d = New ChromeDriver
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    Const URL = "https://tradingeconomics.com/"

    With d
    .Start "Chrome"
    .get URL
    .FindElementByCss("[value=world]").Click

    Application.Wait Now + TimeSerial(0, 0, 5)

    clipboard.SetText .FindElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").Attribute("outerHTML")
    clipboard.PutInClipboard
    .Quit
    ws.Cells(1, 1).PasteSpecial
    End With
    End Sub





    share|improve this answer























    • Wow ... your coding output is amazing. IE coding is really good. And then .. I just installed the Selenium basic on my computer and tried to use your coding results. I checked the Selenium Type Library, but I get an error. 33 runtime err. SessionNotCreatedError session not created exception from unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData": {frameid ":" 21828B311DAD0D41D57FF8B55301D1CA , "isDefau (Session info: chrome = 70.0.3538.102)
      – 김기성
      Nov 11 at 15:38










    • Not sure but start by checking through the list of requirements and issues in the second link in my selenium answer; where it says here. If after that still a problem let me know and I will see what we can do.
      – QHarr
      Nov 11 at 15:42


















    1














    Internet Explorer



    Here with IE - get's all results (the whole World) in one go including links.



    Condition based wait with timeout:



    Option Explicit
    Public Sub GetInfo()
    Dim IE As New InternetExplorer, ws As Worksheet, clipboard As Object, t As Date
    Const MAX_WAIT_SEC As Long = 5
    Const URL = "https://tradingeconomics.com/"

    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

    With IE
    .Visible = True
    .navigate URL

    While .Busy Or .readyState < 4: DoEvents: Wend

    With .document
    .querySelector("[value=world]").Selected = True
    .querySelector("select").FireEvent "onchange"
    t = Timer
    Do
    DoEvents
    If Timer - t > MAX_WAIT_SEC Then Exit Do
    Loop While .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_ParameterContinent").Value <> "world"

    clipboard.SetText .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").outerHTML
    clipboard.PutInClipboard
    End With
    .Quit
    ws.Cells(1, 1).PasteSpecial
    End With
    End Sub


    Explicit wait based:



    Option Explicit

    Public Sub GetInfo()
    Dim IE As New InternetExplorer, ws As Worksheet, clipboard As Object
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    Const URL = "https://tradingeconomics.com/"
    With IE
    .Visible = True
    .navigate URL

    While .Busy Or .readyState < 4: DoEvents: Wend

    With .document
    .querySelector("[value=world]").Selected = True
    .querySelector("select").FireEvent "onchange"

    Application.Wait Now + TimeSerial(0, 0, 5)

    clipboard.SetText .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").outerHTML
    clipboard.PutInClipboard
    End With
    .Quit
    ws.Cells(1, 1).PasteSpecial
    End With
    End Sub




    Selenium basic



    This is easy enough using selenium basic and allowing enough time for the postBack to update the page. After selenium basic install add reference via VBE> Tools > References > Selenium Type Library. More selenium info [here]. The below gets all the World data in one go.



    Option Explicit

    Public Sub GetInfo()
    Dim d As WebDriver, ws As Worksheet, clipboard As Object
    Set d = New ChromeDriver
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    Const URL = "https://tradingeconomics.com/"

    With d
    .Start "Chrome"
    .get URL
    .FindElementByCss("[value=world]").Click

    Application.Wait Now + TimeSerial(0, 0, 5)

    clipboard.SetText .FindElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").Attribute("outerHTML")
    clipboard.PutInClipboard
    .Quit
    ws.Cells(1, 1).PasteSpecial
    End With
    End Sub





    share|improve this answer























    • Wow ... your coding output is amazing. IE coding is really good. And then .. I just installed the Selenium basic on my computer and tried to use your coding results. I checked the Selenium Type Library, but I get an error. 33 runtime err. SessionNotCreatedError session not created exception from unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData": {frameid ":" 21828B311DAD0D41D57FF8B55301D1CA , "isDefau (Session info: chrome = 70.0.3538.102)
      – 김기성
      Nov 11 at 15:38










    • Not sure but start by checking through the list of requirements and issues in the second link in my selenium answer; where it says here. If after that still a problem let me know and I will see what we can do.
      – QHarr
      Nov 11 at 15:42
















    1












    1








    1






    Internet Explorer



    Here with IE - get's all results (the whole World) in one go including links.



    Condition based wait with timeout:



    Option Explicit
    Public Sub GetInfo()
    Dim IE As New InternetExplorer, ws As Worksheet, clipboard As Object, t As Date
    Const MAX_WAIT_SEC As Long = 5
    Const URL = "https://tradingeconomics.com/"

    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

    With IE
    .Visible = True
    .navigate URL

    While .Busy Or .readyState < 4: DoEvents: Wend

    With .document
    .querySelector("[value=world]").Selected = True
    .querySelector("select").FireEvent "onchange"
    t = Timer
    Do
    DoEvents
    If Timer - t > MAX_WAIT_SEC Then Exit Do
    Loop While .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_ParameterContinent").Value <> "world"

    clipboard.SetText .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").outerHTML
    clipboard.PutInClipboard
    End With
    .Quit
    ws.Cells(1, 1).PasteSpecial
    End With
    End Sub


    Explicit wait based:



    Option Explicit

    Public Sub GetInfo()
    Dim IE As New InternetExplorer, ws As Worksheet, clipboard As Object
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    Const URL = "https://tradingeconomics.com/"
    With IE
    .Visible = True
    .navigate URL

    While .Busy Or .readyState < 4: DoEvents: Wend

    With .document
    .querySelector("[value=world]").Selected = True
    .querySelector("select").FireEvent "onchange"

    Application.Wait Now + TimeSerial(0, 0, 5)

    clipboard.SetText .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").outerHTML
    clipboard.PutInClipboard
    End With
    .Quit
    ws.Cells(1, 1).PasteSpecial
    End With
    End Sub




    Selenium basic



    This is easy enough using selenium basic and allowing enough time for the postBack to update the page. After selenium basic install add reference via VBE> Tools > References > Selenium Type Library. More selenium info [here]. The below gets all the World data in one go.



    Option Explicit

    Public Sub GetInfo()
    Dim d As WebDriver, ws As Worksheet, clipboard As Object
    Set d = New ChromeDriver
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    Const URL = "https://tradingeconomics.com/"

    With d
    .Start "Chrome"
    .get URL
    .FindElementByCss("[value=world]").Click

    Application.Wait Now + TimeSerial(0, 0, 5)

    clipboard.SetText .FindElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").Attribute("outerHTML")
    clipboard.PutInClipboard
    .Quit
    ws.Cells(1, 1).PasteSpecial
    End With
    End Sub





    share|improve this answer














    Internet Explorer



    Here with IE - get's all results (the whole World) in one go including links.



    Condition based wait with timeout:



    Option Explicit
    Public Sub GetInfo()
    Dim IE As New InternetExplorer, ws As Worksheet, clipboard As Object, t As Date
    Const MAX_WAIT_SEC As Long = 5
    Const URL = "https://tradingeconomics.com/"

    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")

    With IE
    .Visible = True
    .navigate URL

    While .Busy Or .readyState < 4: DoEvents: Wend

    With .document
    .querySelector("[value=world]").Selected = True
    .querySelector("select").FireEvent "onchange"
    t = Timer
    Do
    DoEvents
    If Timer - t > MAX_WAIT_SEC Then Exit Do
    Loop While .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_ParameterContinent").Value <> "world"

    clipboard.SetText .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").outerHTML
    clipboard.PutInClipboard
    End With
    .Quit
    ws.Cells(1, 1).PasteSpecial
    End With
    End Sub


    Explicit wait based:



    Option Explicit

    Public Sub GetInfo()
    Dim IE As New InternetExplorer, ws As Worksheet, clipboard As Object
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    Const URL = "https://tradingeconomics.com/"
    With IE
    .Visible = True
    .navigate URL

    While .Busy Or .readyState < 4: DoEvents: Wend

    With .document
    .querySelector("[value=world]").Selected = True
    .querySelector("select").FireEvent "onchange"

    Application.Wait Now + TimeSerial(0, 0, 5)

    clipboard.SetText .getElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").outerHTML
    clipboard.PutInClipboard
    End With
    .Quit
    ws.Cells(1, 1).PasteSpecial
    End With
    End Sub




    Selenium basic



    This is easy enough using selenium basic and allowing enough time for the postBack to update the page. After selenium basic install add reference via VBE> Tools > References > Selenium Type Library. More selenium info [here]. The below gets all the World data in one go.



    Option Explicit

    Public Sub GetInfo()
    Dim d As WebDriver, ws As Worksheet, clipboard As Object
    Set d = New ChromeDriver
    Set ws = ThisWorkbook.Worksheets("Sheet1")
    Set clipboard = GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    Const URL = "https://tradingeconomics.com/"

    With d
    .Start "Chrome"
    .get URL
    .FindElementByCss("[value=world]").Click

    Application.Wait Now + TimeSerial(0, 0, 5)

    clipboard.SetText .FindElementById("ctl00_ContentPlaceHolder1_defaultUC1_CurrencyMatrixAllCountries1_GridView1").Attribute("outerHTML")
    clipboard.PutInClipboard
    .Quit
    ws.Cells(1, 1).PasteSpecial
    End With
    End Sub






    share|improve this answer














    share|improve this answer



    share|improve this answer








    edited Nov 11 at 16:05

























    answered Nov 11 at 14:58









    QHarr

    29.8k81841




    29.8k81841












    • Wow ... your coding output is amazing. IE coding is really good. And then .. I just installed the Selenium basic on my computer and tried to use your coding results. I checked the Selenium Type Library, but I get an error. 33 runtime err. SessionNotCreatedError session not created exception from unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData": {frameid ":" 21828B311DAD0D41D57FF8B55301D1CA , "isDefau (Session info: chrome = 70.0.3538.102)
      – 김기성
      Nov 11 at 15:38










    • Not sure but start by checking through the list of requirements and issues in the second link in my selenium answer; where it says here. If after that still a problem let me know and I will see what we can do.
      – QHarr
      Nov 11 at 15:42




















    • Wow ... your coding output is amazing. IE coding is really good. And then .. I just installed the Selenium basic on my computer and tried to use your coding results. I checked the Selenium Type Library, but I get an error. 33 runtime err. SessionNotCreatedError session not created exception from unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData": {frameid ":" 21828B311DAD0D41D57FF8B55301D1CA , "isDefau (Session info: chrome = 70.0.3538.102)
      – 김기성
      Nov 11 at 15:38










    • Not sure but start by checking through the list of requirements and issues in the second link in my selenium answer; where it says here. If after that still a problem let me know and I will see what we can do.
      – QHarr
      Nov 11 at 15:42


















    Wow ... your coding output is amazing. IE coding is really good. And then .. I just installed the Selenium basic on my computer and tried to use your coding results. I checked the Selenium Type Library, but I get an error. 33 runtime err. SessionNotCreatedError session not created exception from unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData": {frameid ":" 21828B311DAD0D41D57FF8B55301D1CA , "isDefau (Session info: chrome = 70.0.3538.102)
    – 김기성
    Nov 11 at 15:38




    Wow ... your coding output is amazing. IE coding is really good. And then .. I just installed the Selenium basic on my computer and tried to use your coding results. I checked the Selenium Type Library, but I get an error. 33 runtime err. SessionNotCreatedError session not created exception from unknown error: Runtime.executionContextCreated has invalid 'context': {"auxData": {frameid ":" 21828B311DAD0D41D57FF8B55301D1CA , "isDefau (Session info: chrome = 70.0.3538.102)
    – 김기성
    Nov 11 at 15:38












    Not sure but start by checking through the list of requirements and issues in the second link in my selenium answer; where it says here. If after that still a problem let me know and I will see what we can do.
    – QHarr
    Nov 11 at 15:42






    Not sure but start by checking through the list of requirements and issues in the second link in my selenium answer; where it says here. If after that still a problem let me know and I will see what we can do.
    – QHarr
    Nov 11 at 15:42















    2














    The Czech Republic value is part of a values set which is returned from the server after clicking a button in the web page itself, you'll have to simulate a click on this button by the VBA code, wait for IE to fetch the result and then continue with your code:



    As this is the HTML of the button for fetching the next set of values:



    <button type="button" class="btn btn-default">...


    Use this to simulate a click and wait for the result fetched:



    IE.document.getElementsByClassName("btn-default")(0).Click
    Application.Wait(Now + TimeValue("0:00:05"))


    After it you will be able to read the Czech Republic and the next set of values by the VBA code.






    share|improve this answer


























      2














      The Czech Republic value is part of a values set which is returned from the server after clicking a button in the web page itself, you'll have to simulate a click on this button by the VBA code, wait for IE to fetch the result and then continue with your code:



      As this is the HTML of the button for fetching the next set of values:



      <button type="button" class="btn btn-default">...


      Use this to simulate a click and wait for the result fetched:



      IE.document.getElementsByClassName("btn-default")(0).Click
      Application.Wait(Now + TimeValue("0:00:05"))


      After it you will be able to read the Czech Republic and the next set of values by the VBA code.






      share|improve this answer
























        2












        2








        2






        The Czech Republic value is part of a values set which is returned from the server after clicking a button in the web page itself, you'll have to simulate a click on this button by the VBA code, wait for IE to fetch the result and then continue with your code:



        As this is the HTML of the button for fetching the next set of values:



        <button type="button" class="btn btn-default">...


        Use this to simulate a click and wait for the result fetched:



        IE.document.getElementsByClassName("btn-default")(0).Click
        Application.Wait(Now + TimeValue("0:00:05"))


        After it you will be able to read the Czech Republic and the next set of values by the VBA code.






        share|improve this answer












        The Czech Republic value is part of a values set which is returned from the server after clicking a button in the web page itself, you'll have to simulate a click on this button by the VBA code, wait for IE to fetch the result and then continue with your code:



        As this is the HTML of the button for fetching the next set of values:



        <button type="button" class="btn btn-default">...


        Use this to simulate a click and wait for the result fetched:



        IE.document.getElementsByClassName("btn-default")(0).Click
        Application.Wait(Now + TimeValue("0:00:05"))


        After it you will be able to read the Czech Republic and the next set of values by the VBA code.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 11 at 14:34









        Alon Adler

        2,68532438




        2,68532438






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53249654%2fclick-related-to-dopostback-href-in-vba%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            這個網誌中的熱門文章

            Xamarin.form Move up view when keyboard appear

            Post-Redirect-Get with Spring WebFlux and Thymeleaf

            Anylogic : not able to use stopDelay()