Dubbio amletico

di il
4 risposte

Dubbio amletico

Ciao a tutti,
premetto che ho già trovato una soluzione al problema ma vorrei capire il motivo dell'errore.

Ho definito una sub con 1 variabile
 Public Sub riLoad(ByVal tOper As Byte)
La richiamo dalle form con
riLoad (3)
TUTTO FUNZIONA!!!

voglio utilizzare 2 variabili, quindi cambio il codice
Public Sub riLoad(ByVal tOper As Byte, ByVal tSalva As Integer)
ma quando provo a chiamarla con
riLoad (1,1)
access mi da errore (già in scrittura su vba) e mi dice che "Previsto =" , ma se tolgo il secondo valore
riLoad (1)
non mi dice niente. Ovviamente poi non funziona.

Ho provato a modificare la Sub in Function ma l'errore rimane
Public Function riLoad(ByRef tOper As Byte, ByRef tSalva As Integer) As Integer
Per risolvere è stato sufficiente associare la chiamata a una variabile
Dim pippo
pippo = riLoad(1, 1)
Qualcuno mi sa spiegare perchè?
Grazie 1000
Ciao

4 Risposte

  • Re: Dubbio amletico

    RiLoad 1, 1
  • Re: Dubbio amletico

    Per evitare di dover associare la chiamata ad una variabile puoi utilizzare Call:
    Call riLoad(1,1)
    Ovviamente puoi utilizzare Call anche quando la tua Sub prevede uno, o zero, parametri
  • Re: Dubbio amletico

    Grazie nicolap97, Grazie Oregon,
    quindi bastava togliere le parentesi o usare Call.
    Ma perchè con una sola variabile accettava la chiamata diretta??
    Secondo me nel programmatore che ha studiato questi comandi c'è del sadismo
    Grazie ancora
    Ciao
    R
  • Re: Dubbio amletico

    No niente misteri. Esiste una sintassi precisa e deve essere conosciuta altrimenti si possono avere questi dubbi.

    Le regole prevedono che una Sub/Function la puoi chiamare con il suo nome passando i parametri senza parentesi

    riLoad 1, 1

    oppure utilizzando la Call o assegnando l'eventuale valore restituito ad una espressione o variabile e in questo caso le parentesi sono obbligatorie

    Call riLoad (1, 1)
    a = riLoad(1, 1)
    Print riLoad(1, 1)
    Print Abs( riLoad(1, 1) )

    Il fatto che abbia funzionato con una parentesi è perché il compilatore intende quella parentesi come parte di una espressione, ovvero

    riLoad (1)

    è come scrivere

    riLoad (0+1*2-1)

    in cui le parentesi vengono intese come parte dell'espressione matematica e non come contenenti un parametro. Ovvero potresti scrivere lecitamente

    riLoad (1), (1)

    perché equivale a

    riLoad 1, 1

    ma non

    riLoad (1, 1)

    perché, in questo caso le parentesi NON possono essere intese come parte di una espressione. Se vuoi usare le parentesi per i parametri, essendo necessaria la Call (per le Sub) o l'assegnazione a variabile (per le Function), avresti un errore
Devi accedere o registrarti per scrivere nel forum
4 risposte