Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1168to1172
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
Inhaltsverzeichnis

Function-Aufruf

Function-Aufruf
Manfred
Hallo zusammen,
ich habe folgende Function
Function Pfadfinder(rngStart As Range, rngZiel As Range) As Boolean
End Function
Wenn ich die Funktion mit folgendem Skript aufrufe, funktioniert sie einwandfrei.
Sub start_Block1 ()
MsgBox Pfadfinder(Cells(39, 110), Cells(33, 179))
End Sub
Sobald ich aber statt der Cells-Eingabe ein anders definiertes Range-Objekt oder auch ein Objekt aus der Names-Auflistung verwende, kommt jedesmal die Fehlermeldung, dass die Typen unverträglich sind.
Was muss ich tun um die Funktion mit zwei benamten Bereichen (jeweils aus einer Zelle bestehend) aufrufen will.
Vielen Dank im Voraus.
Gruß
Manfred

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Function-Aufruf
03.08.2010 16:39:13
Hajo_Zi
Hallo Manfred,
nur wenige sehe Deinen anderen Aufruf?

AW: Function-Aufruf
03.08.2010 16:47:39
Tino
Hallo,
wenn Du ein Range- Objekt übergibst sollte es eigentlich funktionieren.
Es sei denn dieses Range Objekt, dass Du noch hast ist nicht als Range Objekt deklariert,
sondern vielleicht als Variant oder gar nicht deklariert, dann ist es automatisch Variant.
Dann müsste sowas wie ByRef unverträglich kommen.
Abhilfe könnte in diesem Fall sein, dieses Objekt sauber zu deklarieren oder
die Argumente als ByVal anzugeben damit diese neu erzeugt werden.
Gruß Tino
Anzeige
AW: Function-Aufruf
03.08.2010 17:20:55
Manfred
Hallo Tino,
ich habe zum Beispiel folgenden Code ausprobiert.
Sub Start_Matrix_1()
Dim s1 As Object
Dim rng1 As Range
Dim rng2 As Range
Dim ergeb As Boolean
Set s1 = ActiveWorkbook.Sheets("UWKW")
snam1 = s1.Cells(56, 16)
snam2 = s1.Cells(56, 20)
For Each nme In ThisWorkbook.Names
bname = nme.Name
If bname = snam1 Then
Set rng1 = nme
ElseIf bname = snam2 Then
Set rng2 = nme
End If
Next nme
ergeb = Pfadfinder(rng1, rng2)
End Sub
Dann kommt die Fehlermeldung 'Typen unverträglich' bezogen auf die Zeile 'Set rng1 = nme' .
Wenn ich nme auch als Range deklariere, kommt die gleiche Fehlermeldung bereits bei der Zeile 'For Each nme In ThisWorkbook.Names'.
Wie kann ich aus der Names-Auflistung ein Objekt herausbekommen, das mit einem Range-Objekt verträglich ist?
Gruß
Manfred
Anzeige
da bräuche man eine Beispieldatei...
03.08.2010 17:41:11
Tino
Hallo,
so kann ich nicht erkennen was da abläuft und alles nachbauen möchte ich auch nicht.
Gruß Tino
AW: Function-Aufruf
03.08.2010 18:03:36
wsp
Hallo Tino,
stark vereinfacht sieh dein Funktionsaufruf so aus:
Option Explicit
Sub Start_Matrix_1()
With ActiveWorkbook.Sheets("UWKW")
Debug.Print Pfadfinder(.Range(.Cells(56, 16)), .Range(.Cells(56, 20)))
End With
End Sub

Function Pfadfinder(rngStart As Range, rngZiel As Range) As Boolean
End Function

Das setzt aber vorraus, dass in den Zellen 56,16 und 56,20 des Blattes "UWKW" die gleichen Namen als Text stehen, denen diese Zellen als Name zugeordnet sind. Der Sinn ist mir noch schleierhaft.
Gruss Wolfgang
Anzeige
meinst Du wirklich mich? ;-) oT.
03.08.2010 19:07:32
Tino
AW: meinst Du wirklich mich? ;-) oT.
03.08.2010 21:16:53
wsp
nein, war ein Versehen - entschuldige bitte
Wolfgang
AW: Function-Aufruf
04.08.2010 07:53:16
Manfred
Hallo Wolfgang,
vielen Dank für die Syntax, aber dieser Aufruf trifft nicht wirklich mein Problem. Leider kann ich nicht die komplette Datei hochladen, da sie in einem vertraulichen Projekt verwendet wird.
Aber noch mal die Darstellung meines Problems.
In dem Worksheet("UWKW") ist mit grafischen Zeichen ein komplexes Netzwerk mit einer Vielzahl von Schaltern dargestellt. In diesem Netz gibt es 8 Einspeisepunkte auf verschiedenen Koordinaten. Die Funktion Pfadfinder dient dazu festzustellen, ob zwei dieser Einspeisepunkte über einen Pfad mit geschlossenen Schaltern verbunden sind (so ähnlich wie die Zeichenrätsel "Welchen Pfad muss X nehmen um von A nach B zu kommen"). Jeder dieser 8 Einspeisepunkte hat einen Namen und die Zelle auf der dieser Punkt liegt, stellt einen Bereich dar, der den selben Namen trägt.
An einer anderen Stelle des Arbeitsplatz habe ich eine 8*8 Matrix aufgebaut, die die Namen in waagerechter und in senkrechter Anordnung enthält. Über eine geschachtelte Schleife durchlaufe ich nun alle Zellen der Matrix und lese jeweils den Spalten- und den Zeilennamen (snam1 und snam2). Dann laufe ich in einer Schleife alle Bereichsnamen und prüfe ob sie mit snam1 oder snam2 übereinstimmen. Wenn ja, soll als Range die Zelle ausgewählt werden, die dem Bereichsnamen zugeordnet ist, und an die Funktion Pfadfinder übergeben werden.
Ich mache das deshalb so kompliziert, weil sich die Bereiche der Einspeisepunkte im Arbeitsblatt durch Umbauten im 'Netzwerk' verschieben können und ich nicht jedesmal die Koordinaten im VBA-Code anpassen möchte.
Ziel ist also aus einem beliebigen Bereich. die Zelle auf die sich dieser Bereich bezieht als Range-Objekt an die Funktion 'Pfadfinder' zu übergeben.
Vielleicht wird die Aufgabenstellung dadurch verständlicher und du kannst mir noch einen guten Tipp geben. Vielen Dank.
Gruß
Manfred
Anzeige
AW: Function-Aufruf
04.08.2010 09:45:15
Tino
Hallo,
Du kannst es mal noch so versuchen, ob es funktioniert kann ich nicht sagen,
da ich es nicht nach gebaut habe.
Sub Start_Matrix_1()
Dim s1 As Object
Dim rng1 As Range
Dim rng2 As Range
Dim ergeb As Boolean
Dim nme As name, bname As string
Set s1 = ActiveWorkbook.Sheets("UWKW")
snam1 = s1.Cells(56, 16)
snam2 = s1.Cells(56, 20)
For Each nme In ThisWorkbook.Names
bname = nme.Name
If bname = snam1 Then
Set rng1 = range(nme.Name)
ElseIf bname = snam2 Then
Set rng2 = range(nme.Name)
End If
Next nme
ergeb = Pfadfinder(rng1, rng2)
End Sub
Gruß Tino
Anzeige
Hurra! Es funktioniert
04.08.2010 11:21:01
Manfred
Hallo zusammen,
jetzt funktioniert das Skript zufriedenstellend. Vielen Dank an alle, die mitgeholfen haben!
Gruß
Manfred

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige