This tutorial assumes you are using any Microsoft Windows Operating System with Office 2010 (32 or 64bit) installed
Step 1: Enable the developer tab in Excel
Start Excel, click on File, options and choose "Customize Ribbon". Then check the "Developer" checkbox in the right column.

Step 2: Add a reference to Microsoft Office Soap Type Library 3.0
Open Visual Basic by going to the first option on the developer tab on the Ribbon.

Scroll down the list of libraries and pick 'Microsoft Office Soap Type Library 3.0'


Step 3: Create a Visual Basic module using the Visual basic Editor
Add this piece of code by choosing Insert->Module. Copy this code into your Excel VBA module
Public Sub getGazetteerRecordsByMRGIDs()
'call the webservice
Dim SoapClient As SoapClient30
Set SoapClient = New SoapClient30
Dim WSDLPath As String
WSDLPath = "https://marineregions.org/gazetteer.php??p=soap&wsdl=1"
Call SoapClient.MSSoapInit(par_WSDLFile:=WSDLPath)
'get MRGID value from cell
Dim MRGID As Range
Set MRGID = Worksheets("ByMRGID").Range("A5:A155")
' clear values from last request
Worksheets("ByMRGID").Range("B3:O1000").ClearContents
' generate title row
Const length As Integer = 15
Dim Arr(length)
Arr(1) = "MRGID"
Arr(2) = "preferredGazetteerName"
Arr(3) = "preferredGazetteerNameLang"
Arr(4) = "placeType"
Arr(5) = "latitude"
Arr(6) = "longitude"
Arr(7) = "minLatitude"
Arr(8) = "maxLatitude"
Arr(9) = "minLongitude"
Arr(10) = "maxLongitude"
Arr(11) = "precision"
Arr(12) = "gazetteerSource"
Arr(13) = "status"
Arr(14) = "accepted"
Dim Destination As Range
Set Destination = Range("A2")
Set Destination = Destination.Resize(1, UBound(Arr))
Destination.Value = Arr
'start output from row 3
Dim Row As Integer
Row = 3
'get all the MRGID's in the A column
For Each cell In MRGID
'if cell is not empty
If Len(cell.Value) > 0 Then
Dim Item As Variant
Dim i As Integer
i = 0
'loop the fields of the SoapClient
For Each Item In SoapClient.getGazetteerRecordByMRGID(cell.Value)
If i = 0 Then
Else
'check if the field is on the right spot and fill the cell
If Item.BaseName = Cells(2, i + 1) Then
Cells(Row, i + 1) = Item.Text
Else
For f = i + 1 To length
thing = Cells(2, f)
If Item.BaseName = thing Then
Cells(Row, f) = Item.Text
End If
Next f
End If
End If
i = i + 1
Next
Row = Row + 1
Else
Exit For
End If
Next
Set SoapClient = Nothing
End Sub
Then close the VB Editor.
Step 3: Using the function in Excel
You can now link the function getGazetteerRecordsByMRGIDs to a button located in the "developer" tab, selecting "Insert" and button under "form controls".
You can then right click the button and click "assign a macro..."
Select the macro getGazetteerRecordsByMRGIDs and click ok.

The result should be something like this:

Download this example.
[ back ]
