Still celebrating National IT Professionals Day with 3 months of free Premium Membership. Use Code ITDAY17

x
?
Solved

adapt excel postcode distance calculator

Posted on 2011-03-01
4
Medium Priority
?
981 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 2000 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

Did you know SD-WANs can improve network connectivity? Check out this webinar to learn how an SD-WAN simplified, one-click tool can help you migrate and manage data in the cloud.

Question has a verified solution.

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

Access developers frequently have requirements to interact with Excel (import from or output to) in their applications.  You might be able to accomplish this with the TransferSpreadsheet and OutputTo methods, but in this series of articles I will di…
This article describes a serious pitfall that can happen when deleting shapes using VBA.
The viewer will learn how to use a discrete random variable to simulate the return on an investment over a period of years, create a Monte Carlo simulation using the discrete random variable, and create a graph to represent the possible returns over…
Excel styles will make formatting consistent and let you apply and change formatting faster. In this tutorial, you'll learn how to use Excel's built-in styles, how to modify styles, and how to create your own. You'll also learn how to use your custo…

722 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