VBA automate IE actions

Rasmussen

New Member
Joined
Jun 10, 2019
Messages
24
Hello,

I found this VBA from automatetheweb and I found it very useful to my daily work.

I want to automate the search we daily do with VAT numbers from the EU vies validation page.

So the VBA is suppose to go to the website http://ec.europa.eu/taxation_customs/vies/, then insert A2 in country code and B2 in the text field, then hit submit to get result.

I then need it to show the result in C2, wether it's valid or not.

My problem is, that when I use debug (F8) function in the VBA, there is no problems, but when I then try to run the macro from developer field, it gets stuck at the result page, it doesnt list the result in C2?

The code is following.

Code:
'start a new subroutine called SearchBotSub SearchBot()
 
    'dimension (declare or set aside memory for) our variables
    Dim objIE As InternetExplorer 'special object variable representing the IE browser
    Dim aEle As HTMLLinkElement 'special object variable for an  (link) element
    Dim y As Integer 'integer variable we'll use as a counter
    Dim result As String 'string variable that will hold our result link
 
    'initiating a new instance of Internet Explorer and asigning it to objIE
    Set objIE = New InternetExplorer
 
    'make IE browser visible (False would allow IE to run in the background)
    objIE.Visible = True
 
    'navigate IE to this web page (a pretty neat search engine really)
    objIE.navigate "http://ec.europa.eu/taxation_customs/vies/"
 
    'wait here a few seconds while the browser is busy
    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
 
    'in the search box put cell "A2" value, the word "in" and cell "C1" value
    objIE.document.getElementById("countryCombobox").Value = _
      Sheets("Sheet1").Range("A2").Value
      objIE.document.getElementById("number").Value = _
      Sheets("Sheet1").Range("B2").Value
 
    'click the 'go' button
    objIE.document.getElementById("submit").Click
 
    'wait again for the browser
    Do While objIE.Busy = True Or objIE.readyState <> 4: DoEvents: Loop
 
    'the first search result will go in row 2
    y = 2
 
    'for each  element in the collection of objects with class of 'result__a'...
    For Each Text In objIE.document.getElementsByClassName("labelLeft")
 
        '...get the text within the element and print it to the sheet in col D
        Sheets("Sheet1").Range("D" & y).Value = Text.innerText
        Debug.Print Text.innerText
 
        'is it a yellowpages link?
        If InStr(result, "Nej, momsnummeret er ugyldigt") > 0 Or InStr(result, "Nej") > 0 Then
            'make the result red
            Sheets("Sheet1").Range("C" & y).Interior.ColorIndex = 3
            'place a 1 to the left
            Sheets("Sheet1").Range("B" & y).Value = 1
        End If
 
        'increment our row counter, so the next result goes below
        y = y + 1
 
    'repeat times the # of ele's we have in the collection
    Next
 
    'close the browser
    objIE.Quit
 
'exit our SearchBot subroutine
End Sub

Anyone who can help me out? Thanks.
 
Last edited by a moderator:
This would be much more efficent:
Code:
Public Function IsVatNumberValid(ByVal countryCode As String, ByVal vatNumber As String) As Boolean

    Static req As Object
    If req Is Nothing Then Set req = CreateObject("MSXML2.XMLHTTP")
    
    With req
        .Open "POST", "http://ec.europa.eu/taxation_customs/vies/vatResponse.html", False
        .setrequestheader "Content-Type", "application/x-www-form-urlencoded"
        .send "memberStateCode=" & countryCode & "&Number=" & vatNumber & "&Action=check&check=verify"
        IsVatNumberValid = InStr(result, "Nej, momsnummeret er ugyldigt") > 0 Or InStr(result, "Nej") >
    End With
    

End Function

You can also use it as a worksheet function, like this:
Code:
=IsVatNumberValid(A1,B1)

It returns True for a valid vat number, or False for invalid, it's also much faster than automating internet explorer

I'm getting syntax error expected expression on this line
sVatNumberValid = InStr(result, "Nej, momsnummeret er ugyldigt") > 0 Or InStr(result, "Nej")>
 
Upvote 0

Excel Facts

Who is Mr Spreadsheet?
Author John Walkenbach was Mr Spreadsheet until his retirement in June 2019.
Sorry, I'd copied and pasted yours without altering. Try this:
Code:
Public Function IsVatNumberValid(ByVal countryCode As String, ByVal vatNumber As String) As Boolean

    Static req As Object
    If req Is Nothing Then Set req = CreateObject("MSXML2.XMLHTTP")
    
    With req
        .Open "POST", "http://ec.europa.eu/taxation_customs/vies/vatResponse.html", False
        .setrequestheader "Content-Type", "application/x-www-form-urlencoded"
        .send "memberStateCode=" & countryCode & "&Number=" & vatNumber & "&Action=check&check=verify"
        IsVatNumberValid = InStr(.responsetext, "Nej, momsnummeret er ugyldigt") > 0 Or InStr(.responsetext, "Nej") > 0
    End With
    

End Function
 
Upvote 0
Sorry, I'd copied and pasted yours without altering. Try this:
Code:
Public Function IsVatNumberValid(ByVal countryCode As String, ByVal vatNumber As String) As Boolean

    Static req As Object
    If req Is Nothing Then Set req = CreateObject("MSXML2.XMLHTTP")
    
    With req
        .Open "POST", "http://ec.europa.eu/taxation_customs/vies/vatResponse.html", False
        .setrequestheader "Content-Type", "application/x-www-form-urlencoded"
        .send "memberStateCode=" & countryCode & "&Number=" & vatNumber & "&Action=check&check=verify"
        IsVatNumberValid = InStr(.responsetext, "Nej, momsnummeret er ugyldigt") > 0 Or InStr(.responsetext, "Nej") > 0
    End With
    

End Function

Thanks.

I keep getting False result on valid numbers?
 
Upvote 0
I can't test the above as I don't see the website in Danish, try this though, it should be language agnostic:
Code:
Public Function IsVatNumberValid(ByVal countryCode As String, ByVal vatNumber As String) As Boolean

    Static req As Object
    If req Is Nothing Then Set req = CreateObject("MSXML2.XMLHTTP")
    
    With req
        .Open "POST", "http://ec.europa.eu/taxation_customs/vies/vatResponse.html", False
        .setrequestheader "Content-Type", "application/x-www-form-urlencoded"
        .send "memberStateCode=" & countryCode & "&Number=" & vatNumber & "&Action=check&check=verify"
        IsVatNumberValid = InStr(.responsetext, "class=""validStyle""")
    End With
    

End Function
 
Upvote 0
I can't test the above as I don't see the website in Danish, try this though, it should be language agnostic:
Code:
Public Function IsVatNumberValid(ByVal countryCode As String, ByVal vatNumber As String) As Boolean

    Static req As Object
    If req Is Nothing Then Set req = CreateObject("MSXML2.XMLHTTP")
    
    With req
        .Open "POST", "http://ec.europa.eu/taxation_customs/vies/vatResponse.html", False
        .setrequestheader "Content-Type", "application/x-www-form-urlencoded"
        .send "memberStateCode=" & countryCode & "&Number=" & vatNumber & "&Action=check&check=verify"
        IsVatNumberValid = InStr(.responsetext, "class=""validStyle""")
    End With
    

End Function

Still getting false result. I tried for example DK 25099400, which is valid if I look it up on VIES, but result is false in excel.
 
Upvote 0
Ah. I see that it's because the VIES servers doesnt work for this country code at the moment.

But this could also be a problem, if I want to check, and the server is unavailable, the result will be false, even though it's valid?

Is it possible to change the code, so the result in excel is the innertext from VIES result?
 
Upvote 0

Forum statistics

Threads
1,224,823
Messages
6,181,181
Members
453,022
Latest member
Mohamed Magdi Tawfiq Emam

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top