Ich habe diese Funktion (die auf der Basis der I eine Funktion here):Warum wirft VBA beim Passieren eines Range-Objekts Typabweichungsfehler auf?
Function Foo(ByVal r As range) As String
MsgBox "WHAT. The function worked? Wow!"
Foo = "test"
End Function
habe ich versucht, es wie so nennen:
Let max_row = cells.CurrentRegion.Columns.Count
Set r = range(cells(2, ID_COL), cells(max_row, ID_COL))
Foo r
Und ich bekomme immer die Fehlermeldung: „Laufzeitfehler 13, Typ Mismatch "einmal der Code den Aufruf an Foo trifft.
Zusätzlich habe ich versucht:
Foo (r)
, die den Fehler verursacht: „Object Expected“ Ich nehme an, dies bedeutet, dass Klammern einen Zeiger auf seinen Wert Ehrerbietung, und nicht (? Immer) in Funktion/Unterprogrammaufrufe.
Ich habe auch versucht, die Funktion ohne die "ByVal", aber das ist auch gescheitert.
Irgendwelche Ideen?
EDIT versucht, was @ScottCraner vorgeschlagen, aber der Fehler bleibt:
Dim text As String
Let max_row = cells.CurrentRegion.Columns.Count
Set r = range(cells(2, ID_COL), cells(max_row, ID_COL))
text = Foo(r)
EDIT Wichtiger Hinweis: Diese von einem Makro ausgeführt wird aktiviert Word-Dokument, die Excel-Bibliothek importiert wird und die Arbeitsmappe aus dem Code geöffnet .
Eine Funktion gibt etwas zurück, so dass Sie etwas gleich haben müssen. Wie: 't = Foo (r)' oder ändere es in eine Sub-Funktion anstelle einer Funktion und nenne es so: 'Foo r' –
Es ist nichts falsch mit deiner Codesyntax. Ist das der eigentliche Anrufcode? Auf eine nicht verwandte Anmerkung, zu sagen, VBA ist schlecht oder inadäquat, nur weil Sie seine Funktionsweise nicht verstehen, ist dumm. – Rory
Entschuldigung, für dieses Bit, wenn Sie es in die Frage eingeben (siehe Bearbeiten). Ich habe es erneut mit dem gleichen Ergebnis getestet. Außerdem stimme ich zu! Es ist töricht zu sagen, eine Sprache ist schlecht, bevor Sie verstehen, wie es funktioniert. Deshalb habe ich "wahrscheinlich" gesagt. Ich würde es eine fundierte Vermutung nennen. – tumbleWeed101