Disabilitare/abilitare pulsanti di spostamento tra record

di il
10 risposte

Disabilitare/abilitare pulsanti di spostamento tra record

Buon giorno, ho da poco acquistato un libro sulla programmazione VBA in Access. Nel database allegato nel libro ci sono degli esercizi. Riporto il codice qui sotto. Io ho copiato il codice, ma mi viene restituito un "errore di run time 424 necessario oggetto" ma davvero non riesco a capire dove sia l'errore tenendo conto che: i nomi dei pulsanti sono giusti e che il testo copiato del codice è esattamente quello riportato nel libro! Spero possiate aiutarmi. Grazie!

Private Sub Form_Current()
If CurrentRecord = 1 Then
cmdRecordPrecedente.Enabled = False -----> RIGA INDICATA DALL'ERRORE
cmdPrimoRecord.Enabled = False
Else
cmdRecordPrecedente.Enabled = True
cmdPrimoRecord.Enabled = True
End If
If CurrentRecord = Me.Recordset.RecordCount Then
cmdRecordSuccessivo.Enabled = False
cmdUltimoRecord.Enabled = False
Else
cmdRecordSuccessivo.Enabled = True
cmdUltimoRecord.Enabled = True
End If
End Sub

10 Risposte

  • Re: Disabilitare/abilitare pulsanti di spostamento tra record

    Prima. osa CurrentRecord è una proprietà dell'oggetto Form devi pertanto abituarti ad usare i riferimenti espliciti completi:
    Me.CurrentRecord
    Stessa cosa per gli oggetti contenuti nella form come commandbutton:
    Me!nomecommandbutton
    Noterai la differenza tra il punto, usato per proprietà e metodi, ed il puntoesclamativo per riferimenti ad oggetti.

    Hai impostato nell'editor Vba da impostazioni la definizione obbligatoria delle variabili...?
    Se sindovresti vedere OPTION EXPLICIT in calce al codice...

    Purtroppo i libri non spiegano sempre tutto... e le buone abitudini meglio prenderle.

    Quale oggetto ha il focus in quel momento...?
    Sai fare debug...?
    Sicuro di non aver confuso l'etichetta del commandbutton con il nome dell'oggetto...? Lo vedi nella finestra immediata degli oggetti...?(altro strumento da imparare ad usare subito)
  • Re: Disabilitare/abilitare pulsanti di spostamento tra record

    -Pienamente d'accordo sulle buone abitudini..speravo me le insegnasse il libro!
    -Effettivamente la definizione obbligatoria delle variabili non era spuntata. Ora l'ho attivata.
    -Il focus è sul primo campo della maschera, ma è un "database di esercizio" quindi magari il libro mi farà vedere come sposate il focus più avanti.
    -Conosco la differenza tra oggetto ed etichetta, e i nomi degli oggetti sono tutti giusti. In ogni caso non era attivata nemmeno la finestra oggetti che, effettivamente, è utile.
    -Al debug ci devo ancora arrivare..mi limito a cliccare sul pulsante "debug" per capire dov'è l'errore; altro non so fare.
    Grazie davvero per i consigli! Non sapevo come proseguire la lettura del manuale e finché tutto non avesse funzionato non sarei potuto andare avanti.
    Grazie mille davvero anche per la tempestività della risposta!
  • Re: Disabilitare/abilitare pulsanti di spostamento tra record

    Fai attenzione, ti ho chiesto del focus in quanto quel codice potenzialmente espone ad errore nel caso in cui uno dei Button di spostamento fosse attivo e tu tentasse di disabilitarlo.
    Dal momento in cui hai quell'errore potrei anche aspettarmi tu abbia premuto precedente... e darebbe errore a prescindere.

    Prima di procedere oltre passa alla gestione errori ed al debug, poi torni indietro per comprendere il codice.
    Saper fare debug è LA COSA più importante quando si scrive codice proprio per capire cosa non funziona e no perderci ore...
    La gestione errori ben fatta aiuta ad indirizzare sulla causa, ma anche a gestire errori conosciuti...

    Se vuoi pubblicare in un sito di filesharing il tuo esempio lo guardiamo per vedere come risolvere ed individuare il problema.
  • Re: Disabilitare/abilitare pulsanti di spostamento tra record

    Non vorrei approfittare troppo della tua pazienza ma..ho modificato così:

    Private Sub Form_Current()
    If Me.CurrentRecord = 1 Then
    cmdMe!RecordPrecedente.Enabled = False
    cmdMe!PrimoRecord.Enabled = False
    Else
    cmdMe!RecordPrecedente.Enabled = True
    cmdMe!PrimoRecord.Enabled = True
    End If
    If Me.CurrentRecord = Recordset.RecordCount _
    And CurrentRecord <> 1 Then
    cmdMe!RecordSuccessivo.Enabled = False
    cmdMe!UltimoRecord.Enabled = False
    Else
    cmdMe!RecordSuccessivo.Enabled = True
    cmdMe!UltimoRecord.Enabled = True
    End If
    End Sub


    ma continua a darmi lo stesso errore di prima..per il debug sto installando Visual Studio comunity 2019, poi dovrò capire come funziona..
  • Re: Disabilitare/abilitare pulsanti di spostamento tra record

    Utilizza i TAG per il codice altrimenti non si capisce.

    Poi hai inserito errori sostanziali...
    
    Me!NomeControllo
    perché tu hai messo cmd prima di Me....?
    Cmd fa parte del Nome del controllo...?
    Secondo me commetti qualche errore proprio qui... ma se non pubblichi il tuo demo hai solo tu in mano il debug.

    Il codice corretto è questo, ma è corretto.come sintassi, se invece il problema sono i Nomi non posso saperlo.
    
    Private Sub Form_Current()
    If Me.CurrentRecord = 1 Then
        Me!cmdRecordPrecedente.Enabled = False
        Me!cmdPrimoRecord.Enabled = False
    Else
        Me!cmdRecordPrecedente.Enabled = True
        Me!PrimoRecord.Enabled = True
    End If
    If Me.CurrentRecord = Me.Recordset.RecordCount _
    And Me.CurrentRecord <> 1 Then
        Me!cmdRecordSuccessivo.Enabled = False
        Me!cmdUltimoRecord.Enabled = False
    Else
        Me!xmdRecordSuccessivo.Enabled = True
        Me!xmdUltimoRecord.Enabled = True
    End If
    End Sub
    
  • Re: Disabilitare/abilitare pulsanti di spostamento tra record

    Se invece di Me! usi Me. nel momento in cui digiti il punto automaticamente ti verranno mostrate tutte le proprietà e i metodi dell'oggetto maschera su cui stai lavorando quindi se continui a scrivere e digiti in sequenza i caratteri cmd ti dovrebbe apparire la scritta cmdRecordPrecedente se non appare vuol dire che nella proprietà Nome elemento del pulsante, all'interno della scheda Altro della finestra delle Proprietà, c'è scritto qualcosa di diverso.
  • Re: Disabilitare/abilitare pulsanti di spostamento tra record

    Grazie per le risposte.. sto cercando di imparare ma forse il libro che ho non è proprio tra i migliori..mi dice, per esempio, che il rifermento alla maschera (Me) è sotto inteso se sto scrivendo codice nell'oggetto stesso...mha?. Vedo di sistemare il codice e procedere nella lettura..grazie mille a tutti!
  • Re: Disabilitare/abilitare pulsanti di spostamento tra record

    Si Alex, hai ragione tu!..ho confuso il cmd come un comando di VBA mentre invece fa parte del nome del controllo! Cavolo mi devo svegliare!
  • Re: Disabilitare/abilitare pulsanti di spostamento tra record

    Aiace ha scritto:


    Grazie per le risposte.. sto cercando di imparare ma forse il libro che ho non è proprio tra i migliori..mi dice, per esempio, che il rifermento alla maschera (Me) è sotto inteso se sto scrivendo codice nell'oggetto stesso...mha?. Vedo di sistemare il codice e procedere nella lettura..grazie mille a tutti!
    Il Me se sei all'interno dell'Oggetto è vero che è sottinteso, ma siccome chi scrive codice deve scriverlo spesso in modo flessibile che non sia funzionale solo nella Maschera in uso... ci si da delle regole che consentono anche di LEGGERLO i modo immediato.
    Una di queste accortezze è RENDERE EVIDENTI le dipendenze, in questo caso gli oggetti di cui parli sono contenuti in ME.

    La questione del [PUNTO] o [PuntoVirgola] è lunga e nemmeno importante, ma, anche se il punto acconsente l'accesso all'intellisense come suggerito da Sifone ed il PuntoVirgola no, è bene sapere quale differenza di concetto passi tra il loro utilizzo, che è sempre frutto di convenzioni che uno può usare ma non è obbligato.
    [PUNTO] si usa per accedere a Metodi/Proprietà/Eventi
    [PuntoVirgola] si usa per accedere a riferimenti Espliciti di OGGETTI nel SottoInsieme specifico, come i Controlli nell'oggetto form o i Campi nell'oggetto Recordset.

    Questa differenza è più per distinguere a colpo d'occhio cosa è Oggetto e cosa è Metodo... e quando ti troverai a scrivere codice con Moduli di Classe ne comprenderai forse meglio la sottile utilità.
  • Re: Disabilitare/abilitare pulsanti di spostamento tra record

    Grazie per le ulteriori spiegazioni.. procedo con lo studio..buona giornata!
Devi accedere o registrarti per scrivere nel forum
10 risposte