2009-08-20 16 views
1

Sehr einfaches Problem: Ich habe eine öffentliche Sub (in einem Modul), die ich von einer Schaltfläche auf einem Formular aufrufen möchte. Der Name der Funktion, die ich vom Modul aufrufen möchte, ist GenerateKML.Aufruf einer öffentlichen Sub aus einem Formular in MS Access

Ich habe diesen Beitrag lesen:

How do I call a VBA Function into a Sub Procedure

und versuchte, alle vorgeschlagenen Methoden, von denen keines für mich arbeiten. Möglicherweise gibt es ein Problem mit meinem Code, aber wenn ich in der Codeansicht bin (Bearbeiten des Moduls) und auf die Schaltfläche "Abspielen" klicke, wird der Code korrekt ausgeführt (eine KML-Datei wird erstellt).

Wenn ich die zweite Methode vorgeschlagen (Aufruf einer Unterroutine in einem Modul aus einem Formular) verwenden Ich erhalte diese Fehlermeldung:

Compile Fehler

Erwartete Variable oder Prozedur, nicht Modul

Und wenn ich das dritte Verfahren (Aufruf ein Unterprogramm von einem Formular ohne eine Ereignisprozedur verwendet wird) verwenden, bekomme ich diese:

Der Ausdruck On Click, den Sie als Ereigniseigenschaft eingegeben haben ...: Der von Ihnen eingegebene Ausdruck hat einen Funktionsnamen, den [mein DB-Name] nicht finden kann.

Also ich vermute, dass etwas nicht stimmt mit, wie ich den Code nenne, den ich ausführen möchte.

Dies ist, wie der Code für mein Modul beginnt:

Option Compare Database 
Public Sub GenerateKML() 
' 
' GenerateKML Macro 
' Macro recorded 26/09/2006 by simon_a 
' Adapted and imported to Access by SAA 
' 03 aug 2007 - v3.0 - 2007 08 06 19 24 
' 

    ' DECLARE VARIABLES 
    Dim filename As String 
    Dim docname As String 

Antwort

4

Vielleicht haben genannt Sie Ihren Code die gleichen wie die Prozeduren innerhalb es Module. (nur ein Gedanke)

d. H. Das Sub GenerateKML, sitzt in einem Modul, das Sie GenerateKML genannt haben. Dies erzeugt einen Konflikt & resultierende Fehlermeldung.

+0

Vielen Dank Lil'Monkey - das war's. –

3

Wenn Sie Ihr Modul GenerateKML sowie Ihre Sub genannt haben, müssen Sie es nennen mit:

GenerateKML.GenerateKML arguments 

(oder einfach umbenennen eine oder das andere, das ist wahrscheinlich einfacher)

+0

Danke mavnn, du hattest Recht, es umbenannt hat funktioniert. –

2

try Umbenennung Ihres Moduls mit einem Mod-Präfix: modGenerateKML. Sie verweisen den Modulnamen nicht auf Formulare, sondern nur auf den Namen Ihres öffentlichen Subs oder der Funktion.

+0

Danke Beth! Das hat es getan. –

Verwandte Themen