2013-06-21 6 views
13

Ich poste dies nur, da ich nirgends eine Lösung finden konnte. Ich habe es endlich herausgefunden. Irgendwie albern.MS Access RunCode Makro kann meine Prozedur nicht finden

Bei der Verwendung der RunCode-Eigenschaft in einem Access-Makro habe ich versucht, eine Sub aus meinem globalen Modul auszuführen. Ich erhalte den Fehler "Der eingegebene Ausdruck hat einen Funktionsnamen, den Datenbank nicht finden kann." Ich konnte nicht herausfinden, worum es ging. Ich folgte den Rat von jedem, der zu diesem Thema geschrieben, die meist die folgende war:

  1. Use() am Ende des Verfahren Namen
  2. verwenden Sie NICHT den „=“ vor den Namen der Prozedur

Immer noch nicht funktioniert!

Antwort

27

DANN habe ich die Fehlermeldung sorgfältig gelesen. Es erwähnt, dass es den Namen FUNCTION nicht finden konnte. Offensichtlich erfordert die RunCode-Eigenschaft speziell eine "Function" und kein Sub. Also habe ich einfach meinen Sub in Funktion geändert und es hat gut funktioniert!

Hoffe, das hilft.

+2

Gosh, das hat mich einen halben Tag verrückt gemacht! Ich bin das nicht gewohnt, Access-Programmierung, und brauchte nur ein wenig Code zu enthalten. Der Code war in Ordnung, zeigte Modul keine Fehler, aber meine "Subs" tauchen nicht einmal im Picker auf (ein weiterer Hinweis darauf, dass etwas nicht stimmt). Das Ersetzen von "Sub" durch "Function" löste das Problem! Natürlich ist der "MS Access (context) Hilfe "war nicht einmal in der Lage, die Richtung zu zeigen ... – Izzy

+2

Ich wollte Sie nur wissen lassen, dass Jahre später, immer noch Menschen Speck speichern – Hambone

+0

Danke. Ich fand, dass es keine Notwendigkeit für die Funktion gibt, etwas zurückzugeben oder eine nicht haben defa Ultyp. Sie können das Wort "Sub" einfach durch das Wort "Function" ersetzen. – durette

1

Ich hatte ein ähnliches Problem mit der Fehlermeldung. Mein Code VBA hatte die folgende Erklärung ab:

private function MyFunction() 

.... 

end function 

I private Erklärung der Macro Runcode zu erhalten entfernt die MyFunction()

Zum Beispiel auszuführen:

Function MyFunction() 

End Function 
0

Zugang 2013: Eine Funktion mit MyFunction aufgerufen () von RunCode, wo MyFunction nicht existiert gibt mir Fehler 2425. Nichts von dem oben genannten funktioniert jedoch für mich, und ich bekam immer noch die Fehlernummer 2001, wenn die Funktion existiert und öffentlich ist. Die Datenbank befindet sich in einem vertrauenswürdigen Speicherort. Kein Fehler kompilieren, aber etwas in MyFunction hat nicht funktioniert, nämlich

DoCmd.ShowAllRecords 

nach GoToControl arbeitete mein Unterformular auszuwählen. Echte Problem war mein Code, um einen Filter mit VBA zu entfernen. Handbuch für ShowAllRecords scheint, dass dies anzuzeigen sollte funktionieren, aber DoCmd.ShowAllRecords mit

DoCmd.RunCommand acCmdRemoveFilterSort 

fixiert mein Problem zu ersetzen.

+1

Wie bereits erwähnt, muss die Funktion öffentlich sein und darf nicht in einem Klassenmodul sein (das Formular-/Berichtscodemodule enthält). Tatsächlich können Subs oder Funktionen, die sich in einem Klassenmodul befinden, nicht aufgerufen werden. Es ist also wichtig zu bedenken, dass Formular- (oder Berichts-) Codemodule tatsächlich Klassenobjekte sind. Um Code in einem Klassenmodul aufzurufen, müssen Sie FIRST zuerst eine Instanz dieses Objekts erstellen oder ausführen lassen. Sie können jedoch öffentliche Funktionen in einem Formular aufrufen, indem Sie den Ausdrucksdienst verwenden und das benutzerdefinierte Menü- oder Menübandcode enthält. –

2

andere Lösung, die für mich gearbeitet:

Der Modulname (n) in dem Modul (e) die gleichen Namen wie das Verfahren nicht haben kann.

0

Die Datenbank scheint andere Objekte als die aufgerufene VBA-Funktion zu haben. Ohne andere Objekte (speziell eine Tabelle in meinem Fall) kann die Funktion nicht innerhalb der aufrufenden Umgebung gefunden werden (zB Excel VBA).

0

Ich wollte John Tipton oben danken und einige neue Informationen hinzufügen. Ich benutzte MS Access 2016 und begann dieses Problem zu haben, so dass dieses Problem immer noch seinen hässlichen Kopf aufzieht. Damit meins funktionieren kann, mussten der Funktionsname und der Makroname unterschiedlich sein und im Code nach der Funktion myFunc() musste der Name anders sein als der Modulname, den Sie in der Access-Seitenleiste sehen. Eine andere seltsame Sache.Wenn ich RunCode in Macro anwählte, würde es mir die Funktion zeigen (es würde mir nicht die Sub VBA Module zeigen), die ich zu wählen versuchte, aber als ich es auswählte, kodierte Macro es als den Funktionsnamen mit einem einzigen linken "". Dies lief auf einem Windows 8 Pro-Rechner