Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1944to1948
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

Funktion funktioniert in Sub, im Tabellenblatt nicht

Funktion funktioniert in Sub, im Tabellenblatt nicht
30.08.2023 11:52:01
Shadowfoxl
Hallo zusammen,
mein vorheriger Beitrag https://www.herber.de/cgi-bin/eachthread.pl?idx=1944058 ist anscheinend schon geschlossen. Ist aber gar nicht so schlimm da sich das Problem inzwischen etwas verlagert hat.

Ich möchte eine Information (String) die der Funktion übergeben wird mit denen in einem geschlossenen Tabellenblatt vergleichen. Je nachdem ob der String darin vorkommt oder nicht, soll die Funktion einen anderen String zurück geben.
(Zusatzinfo: Dieser String soll von einer aufrufenden Funktion verwendet werden und zusammen mit Strings/ Ergebnissen von weiteren Funktionen an die Zelle, die die aufrufende Funktion aufruft, ausgegeben werden.)

Mein Code zu der Funktion sieht folgender Maßen aus:
Public Function GetInformationen(Comment)


InfoPfad="C:\Test\...\"
InfoName="Excel1.xlsx"
InfoBlatt="Tabelle1"
c=0

For x=2 To 50
Zeile="R"& x
For y=1 To 7
Spalte="C"& y
If Comment=ExecuteExcel4Macro("'" & InfoPfad & "[" & InfoName & "]" & InfoBlatt & "'!" & Zeile & Spalte) Then
c=c+1
Else
c=c+0
End If
Next
Next

If c=0 Then
Ergebnis="Nicht gefunden. nok"
ElseIf c=1 Then
Ergebnis="Gefunden. ok"
ElseIf c>1 Then
Ergebnis="Mehrere gefunden. nok"
End If

GetInformationen = Ergebnis

End Function
Wenn ich diese Funktion in einem Sub wie folgt aufrufe
Sub test()

Debug.Print GetInformationen("Info")
End Sub
bekomme ich auch ein korrektes Ergebnis.
Möchte ich die Funktion aber in einem Tabellenblatt aufrufen, bricht die Funktion bei der If-Schleife
...

If Comment=ExecuteExcel4Macro("'" & InfoPfad & "[" & InfoName & "]" & InfoBlatt & "'!" & Zeile & Spalte) Then
...
ab und ich bekomme nur die Rückmeldung #WERT!. Ich hatte auch schon alle Variablen vorblidlich deklariert, leider ohne Erfolg. Deswegen hier die kürzere Variante.

Weiß jemand von euch woran das liegen könnte und wie ich das beheben kann?
Wie bereits gesagt möchte ich das Kopieren der Daten in das File in dem ich die Funktion aufrufe möglichst vermeiden. Ein erster Versuch das darüber zu lösen ist nämlich auch schon gescheitert.

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Noch mal ein Test # auch mit einer langen Betreffzeile
30.08.2023 12:04:41
Daniel
Hi
Durchaus möglich, dass der Befehl ExecuteExcel4Makro in Excelzellen nicht zulässig ist.
Funktionen, die in Excelzellen verwendet werden, dürfen lediglich den Wert zurückgeben und ansonsten keine Auswirkung auf das Tabellenblatt haben, deswegen kann es sein, dass eine Funktion funktioniert, wenn sie von einem Makro verwendet wird, aber nicht in einer Zelle.

Probier mal, ob du den externen Bezug auch mit dem Befehl EVALUATE auswerten kannst.

Wenn das nicht geht, gibt's noch nen Trick die Sperre aufzuheben:

Der Teil mit dem Verbotenen Inhalt muss als separate Funktion geschrieben werden.
Dann muss man eine weitere Funktion schreiben,die die andere Funktion mit EVALUATE ausführt. Diese Funktion kommt dann in die Zelle. Damit hat man die Wächter "ausgetrickst"

Gruß Daniel
Anzeige
AW: Noch mal ein Test # auch mit einer langen Betreffzeile
30.08.2023 14:16:42
Shadowfoxl
Hallo Daniel,
danke dir für den Vorschlag. Ich habe es direkt und mit einer zusätzlichen Funktion versucht, leider ohne Erfolg.
Wenn ich die Funktion im Tabellenblatt aufrufen möchte ändert sich nichts und im Sub kommt dann die Fehlermeldung 'Laufzeitfehler '13': Typen unverträglich'.
Gibt es vll. noch eine andere Möglichkeit den Zelleninhalt aus einem geschlossenen Tabellenblatt auszulesen und mit einem vorgegebenen Wert zu vergleichen?
eine andere Möglichkeit
30.08.2023 14:34:17
Rudi Maintaire
Hallo,
wie schon gesagt: Schreib die entsprechende(n) Formel(n) (per VBA) in ein Blatt. Oder per PQ.

Gruß
Rudi
externer Bezug
30.08.2023 15:05:47
daniel
Hi
ich kriegs auch nicht hin.

deine ganze Funktion ist im Prinzip ein

=Verweis(SummenProdukt(1*('"C:\...\[...]Tabelle'!A2:G50="Comment"));{0;1;2};{"Nicht gefunden";"gefunden";"mehrere"})


probiers mal damit.

gruß Daniel
Anzeige

303 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige