Condividi tramite

L'azione openform è stata annullata (Runtime 2013)

Anonimo
2014-11-11T09:45:42+00:00

Salve a tutti,

Ho un problema che si verifica su un pc con Access Runtime 2013 dove su un database accde (compilato) un pulsante che dovrebbe aprire una maschera mi dà il messaggio "L'azione OpenForm è stata annullata" e la maschera effettivamente non viene aperta.

Il codice è semplicissimo:

DoCmd.OpenForm "MiaMaschera"

La versione accdb invece funziona regolarmente.

Lo stesso database (sia accde sia accdb) su un pc con Access 2013 funziona senza problemi.

Ovviamente ho ricompilato, compattato e ripristinato il database più volte ma il problema persiste identico.

Sia access Runtime sia access sull'altro pc sono all'ultima versione disponibile.

Saluti

Davide

Microsoft 365 e Office | Access | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

Risposta accettata dall'autore della domanda

Anonimo
2014-11-11T13:03:43+00:00

Ciao Davide,

il messaggio indica che l'evento Open della maschera MiaMaschera è stato annullato.

Controlla cosa hai messo in tale evento, probabilmente cè una macro o codice VBA che in determinate condizioni annulla l'apertura della maschera, come ad esempio;

Private Sub Form_Open(Cancel As Integer)

   Cancel = True 'Questo impedisce l'apertura della maschera

End Sub

Ciao

Giorgio Rancati

La risposta è stata utile?

0 commenti Nessun commento

5 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2014-12-23T22:24:55+00:00

    Ciao Davide,

    hai già provato a decompilare poi compattare e ricompilare il progetto ?

    La decompilazione in diverse occasioni mi ha risolto comportamenti strani.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-12-23T21:15:52+00:00

    Ciao Giorgio,

    in effetti non è una sub fondamentale, mi serviva più che altro in fase di sviluppo per tenere traccia immediata dei percorsi di collegamento, poi l'ho lasciata per il debug delle varie versioni, infatti come si capisce non fa altro che caricare su una tabella i percorsi delle tabelle collegate per averne una pronta visione (per l'esecuzione del codice infatti posso recuperare i percorsi direttamente dalle proprietà tabella).

    Improvvisamente alla versione 3.06 il programma ha deciso di non gradire più la sub in quel punto.

    Ho provato anche le varie procedure di ripristino senza esito.

    Il problema a questo punto diventa evitare problemi futuri per routine chiave del programma.

    Ciao

    Davide

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2014-12-20T17:31:57+00:00

    Ciao Davide,

    E' difficile dare una risposta senza poter provare il tuo codice.

    Visto che utilizzi il Runtime sicuramente andrai ad aprire la maschera tramite un pulsante o altro, Io eseguirei la sub AggiornaTabCollegamenti prima di aprire la maschera.

    Ciao

    Giorgio Rancati

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2014-12-10T12:37:48+00:00

    Grazie Giorgio della risposta.

    Questo lo avevo verificato, d'altro canto, come ho già detto, nella versione accdb l'inconveniente non si verifica, d'altro canto nel pc con access 2013 non si verifica in nessun caso.

    Ora ho verificato che eliminando l'esecuzione della routine "AggiornaTabCollegamenti" (vedi seguito) il problema non si verifica più, questa routine era richiamata nell'evento Form_Open che segue. Ho risolto momentaneamente eliminando la riga che richiama la routine suindicata, ma è ovvio che qualcosa non torna poiché nessun errore viene rilevato e non è inserita da nessuna parte una istruzione di cancel.

    Davide

    ----- Routine------

    Private Sub Form_Open(Cancel As Integer)

    Dim rs As Recordset

    On Error GoTo Esci

    'MsgBox "Operazioni di apertura maschera Esportapaghe", vbInformation, "Info"

        Forms.Splash.TestoAiuto.Visible = True

        Forms.Splash.TestoAiuto.Caption = "Aggiorna collegamenti"

        AggiornaTabCollegamenti

        Forms.Splash.TestoAiuto.Caption = Forms.Splash.TestoAiuto.Caption & vbCrLf & "Verifica collegamenti"

        Set rs = CurrentDb.OpenRecordset("SELECT Collegamenti.NomeDB, Collegamenti.Collegamento FROM Collegamenti GROUP BY Collegamenti.NomeDB, Collegamenti.Collegamento")

        If rs.RecordCount > 2 Then

            MsgBox "Database non collegato correttamente, rieseguire collegamento tramite la funzione CAMBIA DATABASE, in basso a destra." & vbCrLf & _

                "Se il problema persiste, contattare GestioneDati.com", vbCritical, "ATTENZIONE!"

            Me.EsportazioneINAZ.Enabled = False

        Else

            Me.EsportazioneINAZ.Enabled = True

        End If

        Forms.Splash.TestoAiuto.Caption = Forms.Splash.TestoAiuto.Caption & vbCrLf & "Verifica percorsi"

        If Dir(Me.PercorsoEsportazione, vbDirectory) = "" Then Me.PercorsoEsportazione.ForeColor = 255

        If Dir(Me.DBCollegato) = "" Then Me.DBCollegato.ForeColor = 255

        Forms.Splash.TestoAiuto.Caption = Forms.Splash.TestoAiuto.Caption & vbCrLf & "Nome su barra"

        SysCmd acSysCmdSetStatus, "GestioneDati.com - Esportazione dati ARCA Versione " & Parametri("Versione")

    Esci:

    End Sub


    Public Sub AggiornaTabCollegamenti()

    Dim rst As Recordset

    Dim tdf As TableDef

    Dim stDB As String

        CurrentDb.Execute "DELETE * FROM Collegamenti"

        Set rst = CurrentDb.OpenRecordset("SELECT * FROM Collegamenti")

        For Each tdf In CurrentDb.TableDefs

            ' La tabella è collegata se include una stringa di connessione.

            If Len(tdf.Connect) > 0 Then

                rst.AddNew

                rst!NomeTabella = tdf.Name

                rst!Collegamento = tdf.Connect

                stDB = tdf.Connect

                Do While InStr(1, stDB, "") > 0

                    stDB = Right(stDB, Len(stDB) - InStr(1, stDB, ""))

                Loop

                rst!NomeDB = stDB

                rst.Update

            End If

        Next tdf

        rst.Close

        Set rst = Nothing

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento