2013-06-21 5 views
13

Sto postando solo questo dato che non sono stato in grado di trovare una soluzione da nessuna parte. Finalmente l'ho capito. Tipo di sciocco davvero.MS Access RunCode Macro non trova la mia procedura

Quando si utilizza la proprietà RunCode all'interno di una macro di accesso, si cercava di eseguire una sub dal mio modulo globale. Stavo ricevendo l'errore "L'espressione che hai inserito ha un nome di funzione che il database non riesce a trovare." Non riuscivo a capire quale fosse il problema. Ho seguito il consiglio di tutti che ha postato su questo tema, che è stato in gran parte il seguente:

  1. Usa() alla fine del nome della procedura
  2. NON utilizzare il "=" prima del nome della procedura

Ancora non ha funzionato!

risposta

27

THEN Ho letto il messaggio di errore con attenzione. Ricorda che non è stato possibile trovare il nome FUNCTION. Apparentemente, la proprietà RunCode richiede specificamente una "funzione" non una sub. Così, ho semplicemente cambiato il mio sub a funzione e ha funzionato bene!

Spero che questo aiuti.

+2

Gosh, questo mi stava facendo impazzire mezza giornata! Io non sono abituato ad accedere alla programmazione, e avevo solo bisogno di un piccolo codice da includere. nessun errore, ma i miei "sottotitoli" non vengono nemmeno visualizzati nel picker (un altro indicatore che qualcosa non va). Sostituire semplicemente "Sub" con "Funzione" ha risolto il problema! Inutile dire che "MS Access" (contesto Aiuto "non era nemmeno in grado di indicare la direzione ... – Izzy

+2

Volevo solo farti sapere che anni dopo, questo sta ancora salvando la pancetta delle persone – Hambone

+0

Grazie. Ho scoperto che non è necessario che la funzione restituisca qualcosa o abbia un non- defa tipo ult. Puoi semplicemente sostituire la parola "Sub" con la parola "Funzione". – durette

1

Ho avuto un problema simile con il messaggio di errore. Il mio codice VBA ha avuto la seguente dichiarazione:

private function MyFunction() 

.... 

end function 

ho rimosso private dichiarazione per ottenere il Macro Runcode per eseguire il MyFunction()

Ad esempio:

Function MyFunction() 

End Function 
0

Accesso 2013: Una funzione chiamata con MyFunction () da RunCode in cui MyFunction non esiste mi dà l'errore 2425. Nessuno di quanto sopra funziona per me, tuttavia, e continuavo a ricevere l'errore numero 2001 quando la funzione esiste ed è pubblica. Il database si trova in una posizione attendibile. No errori di compilazione, ma qualcosa nel MyFunction non ha funzionato, e cioè

DoCmd.ShowAllRecords 

dopo VaiAControllo lavorato per selezionare il mio subform. Il vero problema era il mio codice per rimuovere un filtro con VBA. Manuale per ShowAllRecords sembra indicare che questo dovrebbe funzionare, ma sostituendo DoCmd.ShowAllRecords con

DoCmd.RunCommand acCmdRemoveFilterSort 

risolto il mio problema.

+1

Come indicato, la funzione deve essere pubblica, non può essere in un modulo di classe (che include moduli/moduli di codice di report). In effetti non puoi chiamare sottosistemi o funzioni che risiedono in un modulo di classe. Quindi è importante tenere a mente che i moduli di codice di moduli (o report) sono in effetti oggetti di classe. Per chiamare il codice in un modulo di classe, è necessario innanzitutto creare o disporre di un'istanza in esecuzione di tale oggetto. È tuttavia possibile chiamare le funzioni pubbliche in un modulo utilizzando il servizio di espressione e ciò include il menu personalizzato o il codice del nastro. –

2

Un'altra soluzione che ha funzionato per me:

Il nome del modulo non può avere lo stesso nome della procedura (s) nel modulo (s).

0

Sembra che al database sia necessario disporre di oggetti diversi dalla funzione VBA. Senza altri oggetti (in particolare una tabella nel mio caso), la funzione non può essere trovata all'interno dell'ambiente di chiamata (ad es. VBA di Excel).

0

Volevo ringraziare John Tipton sopra e aggiungere alcune nuove informazioni. Stavo usando MS Access 2016 e ho iniziato ad avere questo problema, quindi questo problema sta ancora formando la sua brutta testa. Perché il mio funzioni, il nome della funzione e il nome della macro dovevano essere diversi e nel codice dopo la funzione myFunc() il nome doveva essere diverso dal nome del modulo che vedi nella barra laterale di Access. Un'altra cosa strana.Quando ho selezionato RunCode in Macro mi avrebbe mostrato la funzione (non mi avrebbe mostrato i moduli VBA Sub) che stavo cercando di selezionare ma quando l'ho selezionato, Macro lo codifica come il nome della funzione con un solo paren sinistro "(". Questo era in esecuzione su un computer Windows 8 Pro.