Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
256to260
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
256to260
256to260
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Aufruf einer Sub aus einer Funktion

Aufruf einer Sub aus einer Funktion
20.05.2003 23:17:13
Patrick
Hallo zusammen,
derzeit stellt sich mir das dringende Problem, dass ich eine
Funktion geschrieben, welche aber zu Beginn eine Sub durchlaufen
muss die mir einen variablen Parameter wiedergibt.
Die Sub hat folgende Aufgabe: Sie sucht mein aktives Sheet nach
einem vordefinierten Wort ab (mittels For Next Schleife) und gibt
bei Identifikation desgleich die entsprechenden Lageparameter
(Row und Column) wieder. Somit ist klar wo man sich auf dem
Sheet befindet. Von dort aus soll die entsprechende Koordinate
einer Variablen übergeben werden, die dann in der Funktion genutzt wird.
Problem: Sub und Funktion laufen zwar unabhängig voneinander, jedoch aber nicht zusammen. Der Fehler liegt darin, dass die Sub aus der Funktion aufgerufen wird aber diese nicht komplett durchläuft; genauer gesagt wird die For Next Schleife ignoriert.
Ich hoffe jemand weiss Rat was zu tun ist.... Evtl. verwende ich
auch den falschen Begriff zum Aufruf der Sub (Call).

Patrick

16
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Das geht nur sehr eingeschränkt
21.05.2003 00:14:30
Boris

Hi Patrick,

ich habe kürzlich die gleiche Frage gestellt - ohne allerdings eine absolut dingfeste Antwort zu erhalten:

https://www.herber.de/forum/archiv/256to260/t257013.htm

In einem anderen Forum (Stunden später) hab ich die Frage nochmal gestellt, und als Antwort - mit der ich leben konnte - erhalten, dass eine SUB, die aus einer Function aufgerufen wird - mit einer Art FLAG belegt wird, die diese Vorgehensweise "verbietet".
Rien à faire...

Gruß Boris

Rückfrage
21.05.2003 00:21:51
Hans T.

Hallo Patrick

Mir ist die Problembeschreibung nicht klar.
- Wo ist die For-Next-Schleife - in der Funktion oder in der Sub?
- Wie gibt die Sub die beiden Koordinaten zurück? Oder gibt sie einen variablen Parameter zurück?
- welche For-Next-Schleife wird ignoriert?
- eine Sub wird üblicherweise nicht mit Call aufgerufen sondern direkt bei ihrem Namen genannt.

Vielleicht lässt sich das Problem einfach lösen, wenn es klarer verständlich geschildert ist.

Gruss
Hans T.


Anzeige
Re: Rückfrage
21.05.2003 09:00:22
Patrick

Hallo Hans,

zu deinen Fragen:
- Die For Next Schleife befindet sich in der Sub, die via Call
von der Funktion aus aufgerufen wird
- Die Sub sucht nach einem Wort auf dem Sheet und gibt die
Koordinaten an ein Variable weiter (z.B. a= (Row, Column))
- Kernbestandteil der Sub ist die For Next Schleife, da jede
Zelle des aktiven Sheet durch sie geprüft wird

Struktur:

Funktion Test()

Dim....

Call Sub

....die eigentliche Funktion...

End Function


Sub Test1()

Dim...

For each cell in ...
If cell = "curve" (Keyword das gesucht wird) then
a = diese Koordinate
Next i

End Sub

Anzeige
Re: Das geht nur sehr eingeschränkt
21.05.2003 09:06:03
Patrick

Hi Boris,

ich hab auch schon probiert die Sub direkt in die Funktion
einzubauen, aber auch hier wird die Schleife von Excel ignoriert.

Hattest du das Problem auch?

Gruß

Patrick

Das ist "Vergewaltigung" einer UDF...
21.05.2003 09:22:50
Boris

Hi Patrick,

...sofern man versucht, irgendwas anderes darüber zu steueren als die Zelle selbst, in der die eigene Funktion eingetragen ist.
Natürlich kannst du in eine Function Schleifen etc. einbinden - sie müssen aber zur Berechnung der Function selbst dienen.

Ich bin kein VBA-Crack, vielleicht gibt es noch andere Ansätze, aber mir leuchtet das inzwischen so ein.

Gruß Boris


Anzeige
Re: Aufruf einer Sub aus einer Funktion
21.05.2003 09:52:53
Michael Scheffler

Hi,

warum gestaltest Du Deine Sub nicht auch als Funktion? Wenn Dir ein Wert wideregegeben wird, entspricht das genau der Aufgabenstellung einer Funktion.

Gruß

Micha

Re: Aufruf einer Sub aus einer Funktion
21.05.2003 11:24:23
Patrick

Sinn und Zweck der Sub ist es, das Sheet nach einem KEyword
abzusuchen und von diesem dann die Koordinaten in Form von
Zeile und Spalte ausgeben zu lassen.
Ich denke mit einer Funktion lässt sich das nicht darstellen,
da ja ein Inputparameter erforderlich ist, den ich ja erst
ermitteln muss (mit Hilfe der Sub).

Falls du ne Idee hast- you re welcome!

Gruß
Patrick

Re: Aufruf einer Sub aus einer Funktion
21.05.2003 13:14:59
Michael Scheffler

Hallo,

ja klar habe ich eine Idee. Ob Du das Suchen in einer DFunction oder einer Sub machst, ist für Excel egal. Der Unterschied zwischen Sub und Function ist zunächst lediglich der, dass eine Function nur EINEN wert zurückliefert, bei einer Zelladresse kannst Du ja einen Range zurückgeben:
Option Explicit

Sub TestSub()
If CallRangeFun Then
MsgBox "Hat geklappt"
Else
MsgBox "Nö"
End If
End Sub

Function CallRangeFun() As Boolean
On Error Resume Next
If RangeFun(1, 1).Address <> "" Then
CallRangeFun = True
Else
CallRangeFun = False
EndIf
End Function

Function RangeFun(lngRow As Long, intCol As Integer) As Range
Set RangeFun = Cells(lngRow, intCol)
End Function


Anzeige
Re: Aufruf einer Sub aus einer Funktion
21.05.2003 13:47:12
Patrick

Hi,
danke für deine Idee, aber so wirklich passt das noch nicht. Ich
habe dir unten mal mein Makro zur Suche nach einem Keyword gepastet. Kannst du mal prüfen ob du diese Sub aus irgendeiner
Function aus aufrufen kannst, so dass im weiteren Verlauf der
Function die entsprechende Zelle(Koordinate) zu "curve" (Keyword) als variable (nennen wir sie a) weitergenutzt werden kann.

Sub suche()
Dim str As String
Dim zelle As Range
Dim zeil As Long
Dim spalt As Long
Dim blatt As Worksheet


str = "curve"

ActiveSheet.UsedRange.Select
For Each zelle In Selection

If zelle = str Then
zelle.Select
zeil = ActiveCell.Row
spalt = ActiveCell.Column
MsgBox zeil & " " & spalt
Exit Sub
End If
Next zelle
End Sub

Anzeige
Re: Aufruf einer Sub aus einer Funktion
21.05.2003 14:13:43
Michael Scheffler

Option Explicit

Sub TestFinden()
Dim intCol As Integer
Dim lngRow As Long
Dim rngGefunden As Range
Set rngGefunden = Finden(Range("A1:A16"), "curve")
MsgBox rngGefunden.Address
End Sub

Function Finden(rngSuche As Range, strFind As String) As Range

rngSuche.Select
Set Finden = Selection.Find(What:=strFind, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False)
End Function

Re: Aufruf einer Sub aus einer Funktion
21.05.2003 15:08:10
christian

Hi,

aber das maakro von patrick muß doch auch funktionieren? Warum kann man es nicht so wie es ist in eine function einbauen?
ich habe es gerade auch mal probiert. Sein Suchmakro funktioniert alleine, jedoch nicht sobald man es in eine funktion einbaut.

christian

Anzeige
Verständnisfrage
21.05.2003 15:47:43
Martin Beck

Hallo Michael,

wird in Deinem Beispiel nicht die UDF in einer Sub aufgerufen? Patrick wollte aber die Sub in einer UDF aufrufen. Oder verwechsle ich jetzt was?

Gruß
Martin Beck

Re: Aufruf einer Sub aus einer Funktion
21.05.2003 15:58:04
Martin Beck

Hallo Patrick,

warum ermittelst Du die gesuchten Zeilen- und Spaltenangabe nicht innerhalb Deiner Function ohne eine Sub? Z.B. so:

Den Suchbegriff "curve" überginst Du beim Aufruf der Funktion.

Gruß
Martin Beck

Re: Aufruf einer Sub aus einer Funktion
21.05.2003 16:30:46
Patrick

Hi Martin,

habe dein Makro mal separat probiert und den Begriff curve
auf dem sheet suchen lassen, funktioniert aber leider nicht.

Kannst du noch mal gucken?

Danke,

PATRICK

Anzeige
Re: Verständnisfrage
21.05.2003 16:43:36
Michael Scheffler

Jein, ich habe ihm geschrieben, dass wenn er eine Function aufruft, keine Probleme autauchen sollten. Und wenn er nur einen Wert braucht, dann reicht eine Function.

Re: Aufruf einer Sub aus einer Funktion
21.05.2003 16:49:23
Martin Beck

Hallo Patrick,

in E10: =such("curve")
in D3 steht das Wort curve

Ergebnis: 3 4

Gruß
Martin Beck

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige