Live-Forum - Die aktuellen Beiträge
Datum
Titel
29.03.2024 13:14:12
28.03.2024 21:12:36
28.03.2024 18:31:49
Anzeige
Archiv - Navigation
180to184
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
180to184
180to184
Aktuelles Verzeichnis
Verzeichnis Index
Verzeichnis Index
Übersicht Verzeichnisse
Inhaltsverzeichnis

Makro geht, Funktion nicht

Makro geht, Funktion nicht
18.11.2002 18:30:08
Michael
Hi,

ich muß aus einer Tabelle zuerst den Kunden raussuchen, und dann den Sachbearbeiter1 (bzw. 2, 3).
Dau habe ich ein Makro geschrieben, das auch funktioniert:
Sub FindeSB()
Dim iZeile As Integer, iSpalte As Integer, iWas As Integer
Dim cRange As String, cKunde As String, cSB As String
cKunde = "abcdefg"
iWas = 1
iZeile = Sheets(1).Cells.Find(cKunde).Row
cRange = "A" + CStr(iZeile) + ":" + "N" + CStr(iZeile)
iSpalte = Sheets(1).Range(cRange).Find(iWas).Column
cSB = Sheets(1).Cells(1, iSpalte)
End Sub

Nun wollte ich aus diesem Makro eine Funktion machen, die sieht so aus:

Public Function FindeSaBe(cKunde As Range, iWas As Integer) As String
Dim iZeile As Integer, iSpalte As Integer
Dim cRange As String

iZeile = Sheets(1).Cells.Find(cKunde).Row
cRange = "A" + CStr(iZeile) + ":" + "N" + CStr(iZeile)

iSpalte = Sheets(1).Range(cRange).Find(iWas).Column
FindeSaBe = Sheets(1).Cells(1, iSpalte)

End Function

Selbst wenn ich für cKunde und iWas in der Funktion feste Werte vorgebe, ist das Funktionergebnis #WERT!. Im Einzelschrittmodus kann ich feststellen, daß die Funktion in der Zeile
iZeile = Sheets(1).Cells.Find(cKunde).Row
hängenbleibt.

Was mache ich falsch / kann ich tun? Eigentlichist doch zwischen dem Makro und der Funktion kein Unterschied (mal von den Parametern und der Rückgabe abgesehen, aber zur Rückgabe kommt es ja gar nicht erst). Oder?

Vielen Dank schon mal

Michael



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

Betreff
Datum
Anwender
Anzeige
Re: Makro geht, Funktion nicht
18.11.2002 18:33:41
Jens P.
Hallo Michael,

Du hast cKunde als Range definiert?

Gruß Jens

Re: Makro geht, Funktion nicht
18.11.2002 18:40:20
Michael
Hallo Jens,

ja, da ich die Funktion dann so aufrufen will:
=FindeSaBe(A2;2)

Ich habe auch schon eine Variable cKundeStr definiert und dann cKundeStr = cKunde.Value geschrieben, das Ergebnis ist das gleiche.

Michael

Re: Makro geht, Funktion nicht
19.11.2002 08:16:39
Michael
Hallo HW,

Deine Antwort passt irgendwie nicht auf meine Frage. Denn ich habe weder Office 10.0 noch eine Funktion ohne Parameter noch weise ich einem String einen boolschen Ausdruck zu. Die Funktion hängt auch an der Tabelle. Ich kann auch Private Function oder Public Function schreiben. Keine Änderungen.

Gruß
Michael

Anzeige
Re: Makro geht, Funktion nicht
19.11.2002 10:16:58
Hans W. Hofmann
Also gut, wenn es so schwerfällt die auf Dein Problem passende Passage zu finden, dann
"Eine Funktion kann prinzielle keine Werte außerhalb ihres lokalen Bereiches schreiben. Wenn sowas möglich wäre hätte man bei einer Tabellenfunktion eine Endlosschleife und bei einer VBA-Funktion einen schweren Anwendungsfehler, wie Windows immer sagt. "

Gruß HW

Re: Makro geht, Funktion nicht
19.11.2002 10:31:37
Michael
Hallo HW,

das wäre aber erst dann der Fall, wenn die Funktion den Wert zurückgeben soll. In meinem Fall kommt sie gar nicht soweit sondern steigt schon bei der ersten Anweisung (iZeile = Sheets(1).Cells.Find(cKunde).Row) aus. Ich hatte diese Passage in Deinem Posting schon gelesen....

Gruß
Michael

Anzeige
Re: Makro geht, Funktion nicht
19.11.2002 12:03:11
Hans W. Hofmann
So was wie
Sheets(1).Cells
ist programmtechnisch ein Zeiger (Pointer) auf ein Objekt/einen Speicherbereich (außerhalb der Funktion). Das OOP Konzept geht davon aus, dass alle Objekte nur ihre eigenen Methoden und Eigenschaften manipulieren dürfen und Find ist eine Methode von Range, die Du nicht einfach in Deiner Function aufrufen darfst.
Wenn Du auf Methoden des Tabellenblattes zugreifen willst, so mußt Du die Funktion im Klassenmodul eines Tabellenblattes platzieren und über die Ereignissteuerung starten.
BTW:
Was soll eigentlich die Funktion genau leisten. Sieht sehr handgestrickt aus ;-). Vielleicht kann man drumrum schreiben...


Gruß HW

Anzeige
Re: Makro geht, Funktion nicht
19.11.2002 13:21:16
GerdZ
Hallo Michael,

Du suchst in Spalte A nach cKunde, dann in der gefundenen Zeile von Spalte A bis N nach dem Wert 1 und davon dann die Spaltenüberschrift (Zeile 1 dieser Spalte)?
Dann geht das auch mit den eingebauten Funktionen:

=INDEX(1:1;VERGLEICH(1;INDEX(A:N;VERGLEICH("abcdefg";A:A;0););0))

Gruß
Gerd

Re: Makro geht, Funktion nicht
19.11.2002 13:40:16
Michael
Super! Vielen Dank.

Michael

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige