Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
844to848
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
844to848
844to848
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Verschachtelung

Verschachtelung
18.02.2007 01:49:21
Uwe
Hallo zusammen,
folgende Ausgangssituation:
in einer Liste (Tabellenblatt 1) sind Mitgliederdaten inkl. Adressen vorhanden. Über die folgende Funktion (Auszug) soll die Entfernung zwischen einem Punkt X und der jeweiligen Adresse über die PLZ ermittelt werden. Alle Adressen, die in einem bestimmten Radius liegen werden auf ein neues Tabellenblatt kopiert.
Eine Referenztabelle (Tabellenblatt 2) hält die Längen- und Breitengrade der PLZ vor. Im Tabellenblatt 1 befindet sich nur die PLZ.
Mein Problem ist die verschachtelte Funktion, bez. die richtige Übergabe der Werte aus getCoordinates zur getDistance
Bin für jede noch so kleine Hilfe dankbar!!!
Viele Grüße
Uwe

Private Sub Test()
Dim counter As Integer
Dim lon As Double
Dim lat As Double
Dim lonPPP As Double
Dim latPPP As Double
Dim userData As Range
counter = 0
'Fiktive Werte - Eigentlich wird hier eine Funktion aufgerufen, mit der die Grade eines Punktes X bestimmt werden
lon = 2.02
lat = 10.02
'Suchbereich - Spalte mit Postleitzahlen
Set userData = ThisWorkbook.Worksheets(1).Range("n2:n20")
For int2Row = 1 To userData.Rows.Count
'Hier liegt mein Problem: Muss getDistance mit den Rückgabewerten von getCoordinates füttern
If CInt(getDistance(lat, lon, getCoordinates Trim(userData.Cells(in2Row, 14).Value), lonPPP, latPPP)) <= Trim(TextBox2.Value) Then
counter = counter + 1
If counter = 1 Then
Worksheets.Add After:=Worksheets(Worksheets.Count)
ThisWorkbook.Worksheets(Worksheets.Count).Name = Trim(TextBox1.Value) & " - " & Trim(TextBox2.Value) & " km Radius"
End If
ThisWorkbook.Worksheets(1).Rows(int2Row).Copy Destination:=ThisWorkbook.Worksheets(Worksheets.Count).Rows(counter)
End If
Next int2Row
Unload Me
End Sub

'Hier wird auf ein zweites Blatt mit Postleitzahlen (Spalte 1) und Längen- und Breitengraden (2 und 3) zugegriffen

Private Sub getCoordinates(ByVal zipCode As String, ByRef longitudePPP As Double, ByRef latitudePPP As Double)
Set geoDataPPP = ThisWorkbook.Worksheets(2).Range("A1:C9000")
For int2Row = 1 To geoDataPPP.Rows.Count
If Trim(zipCode) = Trim(geoDataPPP.Cells(int2Row, 1).Value) Then
longitudePPP = geoDataPPP.Cells(int2Row, 2) / 10000
latitudePPP = geoDataPPP.Cells(int2Row, 3) / 10000
End If
Next int2Row
End Sub


Private Function getDistance(ByVal pt1_lat As Double, ByVal pt1_lon As Double, ByVal pt2_lat As Double, ByVal pt2_lon As Double) As Double

                    

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Verschachtelung
18.02.2007 08:42:24
schauan
Hallo Uwe,
erst mal ist Dein getcoordinates ein sub und in Deiner Function willst Du einen Wert haben. Das passt nicht. Entweder Du hast eine Function die Dir den Wert zurückgibt oder Du hast eine öffentliche oder globale Variable die Du in Deinem Sub änderst und dann der Function bereitstellst.
AW: Verschachtelung
18.02.2007 08:46:20
stormy_weathers
Hallo,
hast Du deine beiden variablen als Public deklariert? Sonst verllieren sie ihren Wert nach beendigen der Sub getCoordinates.
Mir ist auch aufgefallen, dass Du einmal longitudePPP und latitudePPP handelst, und dann mit lonPPP und latPPP weiterarbeiten willst. Ich denke das ist falsch, oder?
Gruß
stormy
Anzeige
AW: Verschachtelung
18.02.2007 08:55:59
schauan
Hallo Stormy,
lasse das mit dem offen ruhig den Fragesteller entscheiden. Ich denke, mit meiner Antwort liege ich nicht ganz daneben ...
Die ...PPP's werden übrigens erst in der Function benötigt Es handelt sich um übergebene Werte und da ist es egal wie die im aufrufenden Sub hießen. Der Typ sollte übereinstimmen.
AW: Verschachtelung
18.02.2007 09:14:32
stormy_weathers
Hallo André,
hab ich vergessen den Haken zu setzen, oder soll ich den Haken weglassen?
Ich setze den Haken eigentlich immer (es sei denn ich vergesse ihn...), damit ich den Fragesteller entscheiden lassen kann ob die Frage noch offen ist. Für mich ist die Frage ja dann auch noch offen, weil ich nicht weiß, ob der Fragesteller mit meiner Antwort / Lösung zurechtkommt oder nicht.
Aber ich will mich ja an die Forumsregeln halten. Ich weiß nicht ob es hierfür eine "Richtlinie" oder Empfehlung gibt...
Gruß
stormy
Anzeige
AW: Verschachtelung
18.02.2007 09:32:26
schauan
Hallo Stormy,
den Haken kann setzen wer will, da gibt es keine Vorschriften. In der Regel sollte es der Fragesteller tun, schliesslich kann er am besten entscheiden ob ihm die bisherigen Hinweise ausreichen. Und selbiger tut es, in dem er es uns in einer weiteren Antwort kundtut und dann den Haken setzt.
Oft gibt es auch Fragesteller die selbst oder wo anders eine Lösung gefunden haben und sich nicht mehr melden. Wenn die Frage dann noch auf offen steht weil es ein Antworter gesetzt hat denn beschäftigen sich noch Legionen ;-) damit obwohl das Problem gar nicht mehr relevant ist ...
Als Antworter setze ich den Haken eigentlich nur wenn ich merke, dass der Fragesteller diese Option nicht kennt. Zum Bleistift heute früh hier:
https://www.herber.de/forum/archiv/844to848/t845989.htm
Anzeige
AW: Distanz aus Geo-Koordinaten
18.02.2007 10:51:00
Erich G.
Hallo Uwe,
zunächst ein Tipp: Da fehlt im ersten Beitrag wohl am Ende das abschließende /pre.
Ich setze hier mal zwei /pre's ein.

Das könntest du schneller von Excel in der Tabelle rechnen lassen:
AW: Verschachtelung
18.02.2007 11:25:08
Uwe
Hallo zusammen,
vielen Dank für die Infos. Auch dir Erich, vielen Dank für den Alternativvorschlag.
@Schauan: Könntest du deine Antwort noch präzisieren. Das geht schon in die richtige Richtung. Ich weiß nur gerade nicht, wie ich es umsetzen kann.
Der Code müsste die PLZ nach der Reihe einlesen, sofort die entsprechenden Koordinaten bestimmen und diese dann in der getDistance prüfen. Evtl ist meine Schleife auch nur ungünstig gebaut. Bei anderen Konstrukten hatte ich ganz schnell mal eine Endlosschleife und .. naja, kennt das ja ;-)
Viele Grüße
Uwe
Anzeige
AW: Verschachtelung
18.02.2007 11:57:46
schauan
Hallo Uwe,
wenn wir die Zeile mal analysieren:
If CInt(getDistance(lat, lon, getCoordinates Trim(userData.Cells(in2Row, 14).Value), lonPPP, latPPP)) ... und diesen Part rausnehmen
getDistance(lat, lon, getCoordinates Trim(userData.Cells(in2Row, 14).Value), lonPPP, latPPP)
siehst Du eventuell, dass Du der Funktion mehr Parameter übergeben willst als die aufzunehmen imstande ist:
... getDistance(ByVal pt1_lat As Double, ByVal pt1_lon As Double, ByVal pt2_lat As Double, ByVal pt2_lon As Double) As Double
Dann basteln wir mal aus meiner und der anderen Antwort was zusammen. Hier die Theorie:
1. definiere lonPPP und latPPP über den Makros als Public
2. starte getCoordinates eine Zeile über If CInt.
3. Übergebe getDistance nur noch lat und lon. Die Varieblen für die Koordinanten müssen natürlich in der Function und im Sub gleich heisen wie oben im Public ... Ob Du dan lonPPP oder longitudePPP verwendest musst DU mal auseinaderklabüsern ..
Anzeige
AW: Verschachtelung
18.02.2007 13:11:05
Uwe
Hallo André,
vielen Dank für deinen Input. Es funktioniert!!!
Hoffe, dass ich hier auch irgenwann mal so kompetent weiterhelfen kann!!
Viele Grüße
Uwe

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige