kan deze ook zo worden aangepast

Status
Niet open voor verdere reacties.

dinoshop

Terugkerende gebruiker
Lid geworden
8 sep 2000
Berichten
1.100
kan deze zo worden aangepast dat hij dit als getal zet
mijn mapje km is numeriek voor het optellen van de gemaakte kilometers /
Code:
Dim strResult As String
    On Error Resume Next
    With CreateObject("MSXML2.DOMDOCUMENT")
        .Async = False
        .Load "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" & strOrigins & "&destinations=" & strDestinations & "&sensor=false"
        strResult = .SelectNodes("//status")(0).Text & ", " & .SelectNodes("//status")(1).Text
        If strResult <> "OK, OK" Then
            GoogleMapsXMLDistance = strResult
        Else
            GoogleMapsXMLDistance = .SelectSingleNode("//distance/text").Text
        End If
    End With
 
Ik zie niks met een mapje (bedoel je niet een veld?) km.
 
Het veld [km] dus :). Gaan we verder: ik zie dat veld niet terug in je code. Ik neem aan dat je een webpagina uitleest en dat je het resultaat ergens in terugleest, waarschijnlijk strResult. Wat staat daar in, als alles goed gaat?
 
daar staat echt alles goed maar in me.km word leeg in plaats van een km stand
het deel bestaat uit twee codes
Code:
Private Sub Werknemer_AfterUpdate()
Dim strAfstand  As String
strAfstand = GoogleMapsXMLDistance(Me.ProjectID.Column(2), Me.Werknemer.Column(3))
Me.KM = strAfstand
End Sub

en dit werkt als ik kijk bij me.km= strafstand staan daar de werkelijke kilometers >
maar veld wordt niet ingevuld deze is in de tabel als numeriek aangemaakt, maak ik veld tekst dan word deze wel ingevuld maar dan kan ik niet meer de kilometers optellen.
dus hoe los ik dit op ?
 
Komma notatie verkeerd? Dus een punt waar je en komma moet hebben?
 
Nee he .WELKE PUNTJE MOET ER NU EEN COMA WORDEN ?
 
Laatst bewerkt:
In Bericht #4 vroeg ik wat er in zo'n veld staat. Heb je nog niet gezegd :). Geef eens wat voorbeelden.
 
het probleem is dat de code die nodig is om een km afstand te berekenen altijd in vult bv 120 km en die texts km geeft probleem .
nu weet ik niet zo of mogelijk is deze code zo te maken dat die tekst KM weglaat dus alleen 120 geeft dan is probleem denk ik opgelost .
heb al van alles geprobeerd met die code maar geeft als je tekst weg haalt een leeg veld en anders 120 km en die kan je niet optellen.
ik kom er niet uit
 
Dus de string die je terugkrijgt bevat niet alleen een getal, maar ook tekst. Dan is het logisch dat je daar geen numeriek veld op kunt zetten maar alleen een tekstveld. Je zult de geretourneerde waarde dus moeten splitsen. Bijvoorbeeld zo:
Code:
        Else
            GoogleMapsXMLDistance = .SelectSingleNode("//distance/text").Text
        End If
        If InStr(1, GoogleMapsXMLDistance, " ") > 0 Then
            arr = Split(GoogleMapsXMLDistance, " ")
            MsgBox arr(LBound(arr))
        End If
 
dat van het splitsen had ik al door maar heb geen kaas gegeten van codes met routeplanner .
ik zie veel verschillen in de kilometers als ik bv gebruik maak van ANWB en google
welke is nu de beste.
 
Da's een heel andere vraag; die heeft niet zo heel veel (zeg maar rustig: niks) met Access te maken. Ik zou zeggen: kies de routeplanner die volgens jou het meest in de buurt komt. Of, daar maak je vrienden mee, pak degene die het gunstigst is voor de medewerkers.
 
je word bedankt voor je moeite en tot volgende probleem .
 
nog klein probleem
Code:
Private Sub strPostcodeEind_AfterUpdate()
Dim strAfstand  As String
strAfstand = GoogleMapsXMLDistance(Me.strPostcodeStart, Me.strPostcodeEind)
Me.Kilometers = strAfstand
End Sub
Code:
Public Function GoogleMapsXMLDistance(strOrigins As String, strDestinations As String) As String
    Dim arr() As String
    Dim strResult As String
    
    On Error Resume Next
    With CreateObject("MSXML2.DOMDOCUMENT")
        .Async = False
        .Load "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" & strOrigins & "&destinations=" & strDestinations & "&sensor=false"
        strResult = .SelectNodes("//status")(0) & ", " & .SelectNodes("//status")(1)
        If InStr(1, GoogleMapsXMLDistance, " ") > 0 Then
        arr = Split(GoogleMapsXMLDistance, " ")
                      
        Else
            GoogleMapsXMLDistance = .SelectSingleNode("//distance/text").Text
        End If
        If InStr(1, GoogleMapsXMLDistance, " ") > 0 Then
            arr = Split(GoogleMapsXMLDistance, " ")
            MsgBox arr(LBound(arr))
        End If
        
    End With
End Function
hij vult nog steeds km in met 100 km msgbox is goed die geeft alleen 100 aan
er moet nog iets veranderd worden wat?
 
Ja; je zet de uitkomst van de zoekactie wel in een array, maar je zet de array daarna niet terug in de functie.
Code:
Public Function GoogleMapsXMLDistance(strOrigins As String, strDestinations As String) As String
Dim arr() As String
Dim strResult As String
    
    On Error Resume Next
    With CreateObject("MSXML2.DOMDOCUMENT")
        .Async = False
        .Load "http://maps.googleapis.com/maps/api/distancematrix/xml?origins=" & strOrigins & "&destinations=" & strDestinations & "&sensor=false"
        strResult = .SelectNodes("//status")(0) & ", " & .SelectNodes("//status")(1)
        If Not InStr(1, strResult, " ") > 0 Then strResult = .SelectSingleNode("//distance/text").Text
    End With
    If InStr(1, strResult, " ") > 0 Then
        arr = Split(strResult, " ")
        GoogleMapsXMLDistance = arr(LBound(arr))
    Else
        GoogleMapsXMLDistance = strResult
    End If
End Function
 
zou toch mooi zijn dat ook meteen werkt maar helaas >
als ik een veld in formulier gebruik en niet afhankelijk dan krijg ik netjes 58.2 maar nu gebruik ik een veld met opslaan gegevens dus me.km en dan geeft die dus 582 aan en laat de punt er uit.
 
Je hebt het nu over een ander (en behoorlijk verklaarbaar) probleem; in je vorige berichtje had je het er over dat je nog steeds "100 km" als tekst kreeg i.p.v. "100". Dat heb ik opgelost. Nu heb je dus een ander probleem, en dat komt doordat je rekent in VBA (Amerikaans) en opslaat in een Nederlandse omgeving. In Amerika (en dus ook VBA) wordt een decimaal weergegeven als een punt en een duizendtal scheidingsteken met een komma. In Nederland is dat andersom. Als je de Msgbox goed leest, dan zie je dat je uitkomst ook met een punt wordt weergegeven: "47.7" en niet "47,7". Je slaat dus een getal op in met een duizendtal scheidingsteken. Ergo: je slaat 477 op en niet 47,7. Het simpelste (en meest logische) lijkt mij om de km's af te ronden. Een afstand van 47,7 km voer je dan in als 48. Dan klopt je kilometervergoeding ook weer. En ze vinden je ook gelijk geen 'zuinige hollander' meer :D.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan