Solved

adapt excel postcode distance calculator

Posted on 2011-03-01
4
979 Views
Last Modified: 2012-06-27
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

Open in new window

engineer1.JPG
0
Comment
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
  • Learn & ask questions
  • 3
4 Comments
 
LVL 24

Accepted Solution

by:
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)

Open in new window

0
 
LVL 24

Expert Comment

by:StephenJR
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

by:RossDagley1
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

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

Featured Post

On Demand Webinar - Networking for the Cloud Era

This webinar discusses:
-Common barriers companies experience when moving to the cloud
-How SD-WAN changes the way we look at networks
-Best practices customers should employ moving forward with cloud migration
-What happens behind the scenes of SteelConnect’s one-click button

Question has a verified solution.

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

Deploying a Microsoft Access application in a Citrix environment is not difficult but takes a few steps. However, Citrix system people are often of little help, as they typically know next to nothing about Access. The script provided here will take …
You need to know the location of the Office templates folder, so that when you create new templates, they are saved to that location, and thus are available for selection when creating new documents.  The steps to find the Templates folder path are …
This Micro Tutorial demonstrate the bugs in Microsoft Excel for Mac with Pivot Charts.
This Micro Tutorial will demonstrate on a Mac how to change the sort order for chart legend values and decrpyt the intimidating chart menu.

623 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question