Solved

# adapt excel postcode distance calculator

Posted on 2011-03-01
975 Views
I'm trying to adapt code I've found to my needs and it's working as I'd expect pretty much. However, there's an issue I need to fix I hope you guys can help with.

Basically, I have engineers travelling from one place to another, frequently via a middle destination, but not always. I have a script that looks up the postcode distances and this works just fine for valid postcodes, but I can't work out how to put logic in the code to make it work for when the engineer travels without going to the middle destination.

To explain, look at engineer1 screenshot.

As you can see, engineers normally go from home to tote, to job. However, they MAY go direct from tote to job, or direct from home to job. I need the code to have enough logic to compute this somehow.

The code I'm using currently does the "home to tote" column calculation, and then does the "tote to job" calculation, and this works well. However obviously the "n/a"'s cause a problem and reflect 0 miles.

I'm hoping someone can assist me :)

Thanks!

My current code is attached.

Ross
``````Private Sub GetDistances_Click()

RowCount = 2
FirstCol = "C"
LastCol = "N"
ColCount = Columns(FirstCol).Column

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False

URL = "http://www.postcode.org.uk/country/uk/_postcode-distance-calculator.asp"

IE.Navigate2 URL
Do While IE.readyState <> 4 Or _
IE.busy = True

DoEvents
Loop

With Worksheets("Sheet1")
Do While .Cells(RowCount, ColCount) <> ""
StartLocation = .Cells(RowCount, ColCount).Value
EndLocation = .Cells(RowCount, ColCount + 1).Value

Set Form = IE.document.getElementsByTagname("Form")
Set inputform = Form.Item(0)

Set Postcodebox = inputform.Item(0)
Postcodebox.Value = StartLocation

Set Postcodebox2 = inputform.Item(1)
Postcodebox2.Value = EndLocation

Set POSTCODEbutton = inputform.Item(2)
POSTCODEbutton.Click

Do While IE.readyState <> 4 Or _
IE.busy = True

DoEvents
Loop

Set Table = IE.document.getElementsByTagname("Table")
Set DistanceTable = Table.Item(3)

Set DistanceRow = DistanceTable.Rows(2)
distance = Val(Trim(DistanceRow.Cells(5).innertext))

Cells(RowCount + 0, ColCount + 7) = distance

RowCount = RowCount + 1
Loop
End With

RowCount = 2
FirstCol = "D"
LastCol = "N"
ColCount = Columns(FirstCol).Column

Set IE = CreateObject("InternetExplorer.Application")
IE.Visible = False

URL = "http://www.postcode.org.uk/country/uk/_postcode-distance-calculator.asp"

IE.Navigate2 URL
Do While IE.readyState <> 4 Or _
IE.busy = True

DoEvents
Loop

With Worksheets("Sheet1")
Do While .Cells(RowCount, ColCount) <> ""
StartLocation = .Cells(RowCount, ColCount).Value
EndLocation = .Cells(RowCount, ColCount + 1).Value

Set Form = IE.document.getElementsByTagname("Form")
Set inputform = Form.Item(0)

Set Postcodebox = inputform.Item(0)
Postcodebox.Value = StartLocation

Set Postcodebox2 = inputform.Item(1)
Postcodebox2.Value = EndLocation

Set POSTCODEbutton = inputform.Item(2)
POSTCODEbutton.Click

Do While IE.readyState <> 4 Or _
IE.busy = True

DoEvents
Loop

Set Table = IE.document.getElementsByTagname("Table")
Set DistanceTable = Table.Item(3)

Set DistanceRow = DistanceTable.Rows(2)
distance = Val(Trim(DistanceRow.Cells(5).innertext))

Cells(RowCount + 0, ColCount + 7) = distance

RowCount = RowCount + 1
'ColCount = ColCount + 1
Loop
End With

IE.Quit

End Sub
``````
engineer1.JPG
0
Question by:RossDagley1
[X]
###### Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

• Help others & share knowledge
• Earn cash & points
• 3

LVL 24

Accepted Solution

StephenJR earned 500 total points
ID: 35008331
Not tested, but does changing these two lines work?
``````StartLocation = IIf(.Cells(RowCount, ColCount).Value = "N/A", .Cells(RowCount, ColCount + 1).Value, .Cells(RowCount, ColCount).Value)
EndLocation = IIf(.Cells(RowCount, ColCount + 1).Value = "N/A", .Cells(RowCount, ColCount + 2).Value, .Cells(RowCount, ColCount + 1).Value)
``````
0

LVL 24

Expert Comment

ID: 35008422
Actually not sure on reflection whether that change will do the trick. Could you post a small workbook please?
0

LVL 2

Author Closing Comment

ID: 35008469
Absolutely spot on, and exactly what I was looking for. Solved the issue promptly and accurately. thank you very much - saved me a LOT of head scratching!
0

LVL 24

Expert Comment

ID: 35008508
Ok, glad it worked! A pleasant surprise.
0

## Featured Post

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

### Suggested Solutions

This article descibes how to create a connection between Excel and SAP and how to move data from Excel to SAP or the other way around.
In Part II of this series, I will discuss how to identify all open instances of Excel and enumerate the workbooks, spreadsheets, and named ranges within each of those instances.
The viewer will learn how to create two correlated normally distributed random variables in Excel, use a normal distribution to simulate the return on different levels of investment in each of the two funds over a period of ten years, and, create a …
This Micro Tutorial demonstrates how to create Excel charts: column, area, line, bar, and scatter charts. Formatting tips are provided as well.
###### Suggested Courses
Course of the Month5 days, 5 hours left to enroll