Come eseguire in modo user-friendly un modulo di VBA

di il
6 risposte

Come eseguire in modo user-friendly un modulo di VBA

Buonasera a tutti sono nuovo e non sono un vero programmatore.

Ho creato questo  Modulo in VBA che se eseguito all'interno del prg modulo funziona alla grande.

Function FillEmptyFields()

    Dim db As DAO.Database

    Dim rs As DAO.Recordset

    Dim previousValue As Variant

    Set db = CurrentDb

    Set rs = db.OpenRecordset("SELECT * FROM YourTable ORDER BY YourPrimaryKey")

    rs.MoveFirst

    previousValue = rs!YourField

    Do While Not rs.EOF

        If IsNull(rs!YourField) Then

            rs.Edit

            rs!YourField = previousValue

            rs.Update

        Else

            previousValue = rs!YourField

        End If

        rs.MoveNext

    Loop

    rs.Close

    Set rs = Nothing

    Set db = Nothing

End Function

Però vorrei rendere l'esecuzione più user-friendly da parte degli utenti di Access.

Pensavo ad una macro che esegue il modulo o un bottone che lancia questo modulo ma non riesco a trovarlo.

Quamcuno potrebbe aiutarmi

saluti

r

6 Risposte

  • Re: Come eseguire in modo user-friendly un modulo di VBA

    Prima cosa Formatta il codice con il Pulsante apposito.

    Il MoveFirst non serve a nulla avendo messo ORDERBY nel predicato SQL, il Bookmark va al primo sicuramente in questo caso.

    Non comprendo bene a cosa possa servire questo codice… ma se lo hai scritto servirà…

    Metti un Button in una maschera e su evento Click scrivi:

    Private Sub NomeButton_Click()
    	Call FillEmptyFields
    End Sub
  • Re: Come eseguire in modo user-friendly un modulo di VBA

    Mumble mumble…

    Se il primo recd ha null nel yourfield lo lascia null…

    Un campo può assumere valore null senza che sia un errore… 

    If IsNull(rs!YourField) Then
       rs!YourField = previousValue
    Else
       previousValue = rs!YourField 
    End If

    Quindi se il campo è null metti il valore del record precedente altrimenti il valore del campo del record corrente potrebbe (ma.anche no) essere attribuito al record successivo… ovviamente pregando che il primo record per quel campo non sia null…

    La domanda sorge spontanea: a che serve?

  • Re: Come eseguire in modo user-friendly un modulo di VBA

    19/06/2024 - @Alex ha scritto:


    Non comprendo bene a cosa possa servire questo codice… ma se lo hai scritto servirà…

    19/06/2024 - sihsandrea ha scritto:


    La domanda sorge spontanea: a che serve?

    Secondo me ha una tabella tipo listato Excel dove nel campo X, quando non è stato compilato un valore si sottintende il valore precedente… un po' come mettere le “” virgolette per dire Idem come sopra. Probabilmente ciò gli succede spesso e volentieri, quindi di tanto in tanto sente il bisogno di attivare quella routine.

    19/06/2024 - @Alex ha scritto:


    Prima cosa Formatta il codice con il Pulsante apposito.

    Lo richiede il regolamento, cioè, quando scrivi del codice (VBA, SQL…) nel riquadro editor di quando si scrive un messaggio, abbi cura di selezionarlo, poi clicca sulla 4a icona in alto dell'editor messaggi, per farlo comparire con i tipici caratteri monotype più familiari ai programmatori.

    Function FillEmptyFields()
    ...
    End Function

    Perchè Function? Puoi/devi dichiararla Public Sub.

  • Re: Come eseguire in modo user-friendly un modulo di VBA

    19/06/2024 - OsvaldoLaviosa ha scritto:


    Function FillEmptyFields()
    ...
    End Function

    Perchè Function? Puoi/devi dichiararla Public Sub.

    L'omissione di Public la rende Public di fatto, il fatto sia Function o Sub, oltre che per la definizione stessa di Function/Sub che uno dovrebbe sapere, può dipendere da dove e come viene richiamata, le SUB ad esempio non le puoi richiamare da SQL, da Macro o da Comando diretto negli Eventi… solo le Function.

    Mi sembrava di avertele già esposte queste note…!

  • Re: Come eseguire in modo user-friendly un modulo di VBA

    19/06/2024 - @Alex ha scritto:


    Prima cosa Formatta il codice con il Pulsante apposito.

    Il MoveFirst non serve a nulla avendo messo ORDERBY nel predicato SQL, il Bookmark va al primo sicuramente in questo caso.

    Non comprendo bene a cosa possa servire questo codice… ma se lo hai scritto servirà…

    Metti un Button in una maschera e su evento Click scrivi:

    Private Sub NomeButton_Click()
    	Call FillEmptyFields
    End Sub

    19/06/2024 - @Alex ha scritto:


    Prima cosa Formatta il codice con il Pulsante apposito.

    Il MoveFirst non serve a nulla avendo messo ORDERBY nel predicato SQL, il Bookmark va al primo sicuramente in questo caso.

    Non comprendo bene a cosa possa servire questo codice… ma se lo hai scritto servirà…

    Metti un Button in una maschera e su evento Click scrivi:

    Private Sub NomeButton_Click()
    	Call FillEmptyFields
    End Sub

    Grazie mille funziona benissimo e vi spiego a cosa servre questo codice che mi è stato  suggerito da ChatGPT-4

    ho importato in access un file delle vendite di un cliente ottenuto penso da una tabella pivot dove per ogni prodotto ho diverse capacità.

    esempio Prodotto1      cap1

                                            cap2

                                           cap3

    per cui nel secondo e terzo record non avevo in nome del prodotto.

    Nel file di ‘import  avevo predisposto di avere un campo contatore per cui ho l’ordine esatto di come erano organizzati i record nel file Excel

    Il codice ha appunto il compito di mettere nella seconda riga che è vuota il nome del prodotto che c'è nella riga precedentee così via per le altre righe vuote

    La cosa funziona benissimo

  • Re: Come eseguire in modo user-friendly un modulo di VBA

    La prossima volta dillo subito che hai usato ChatGPT, a noi piace molto questo metodo e sapremo meglio come orientarci.

Devi accedere o registrarti per scrivere nel forum
6 risposte