Come intercettare pulsante annulla - risolto

di il
3 risposte

Come intercettare pulsante annulla - risolto

Ciao a tutti

Premetto che non riesco a cercare i post precedenti in quanto la ricerca avanzata mi butta fuori, quindi chiedo scusa in anticipo se la domanda è stata già posta.

Comunque in una maschera ho un pulsante (cmdImporta) che mi apre il wizard dell'importazione guidata dei file Excel (i nomi dei file non sono mai gli stessi). 

questo è il codice.

Private Sub cmdImporta_Click()
DoCmd.OpenQuery "qrydelreg"
DoCmd.RunCommand acCmdImportAttachExcel
MsgBox "File correttamente importato", vbOKOnly
End Sub

Quando seleziono un file Excel, il wizard esegue tutti i passaggi correttamente. Tuttavia, quando premo annulla il codice non si blocca e mi stampa a video il messaggio di avvenuta importazione.

Ho provato ad usare prima della msgbox la seguente istruzione (che uso per l'Inputbox) ma ovviamente non funziona

If StrPtr(s) = 0 Then Exit Sub

Come mi consigliate di procedere?

Ringrazio tutti in anticipo

3 Risposte

  • Re: Come intercettare pulsante annulla - risolto

    25/06/2024 - Marcdreamer ha scritto:


    Tuttavia, quando premo annulla

    Dove si trova il pulsante Annulla?

    Forse non ho capito cosa vuoi fare, ma prima (oppure in sostituzione) del tuo MsgBox con solo vbOKOnly, hai pensato a un MsgBox con più pulsanti di opzione, con relative istruzioni conseguenziali? Vedi qui

    Funzione MsgBox - Supporto tecnico Microsoft

  • Re: Come intercettare pulsante annulla - risolto

    Scusa ma secondo te il wizard valorizza la variabile [s]…?

    No ovviamente quel codice lo puoi usare sulla chiamata ad InputBox…

    Il wizard è una windows form modale pertanto non intercettabile da VBA.

    Il modo per farlo c'è ma lo eviterei, devi usare SPY++ verificare il calssname della winform e se l'hWnd rimane costante come accade con i Msgbox… a quel punto capire se è child di AccessHwnd e gestire il subclassing dell'hWnd…. Da lì in Wparam o LParam  dovresti identificare la pressione del Click e provare a capire come discriminare Annulla.

    Queste cose le facevo 20anni fa ma reputo siano fuori da ogni ragionevole senso tecnico per il prodotto di Access.

    Un suggerimento… conta i Records prima dell'import e dopo e sai se rispondere TUTTO BENE o TUTTO MALE… ;-)

    Questo dovrebbe anche insegnarti che non si usano Wizard/Filtri Automatici/macro e tutte quelle amenità che semplificano le cose solo a chi non ha competenza… sono ingestibili.

  • Re: Come intercettare pulsante annulla - risolto

    25/06/2024 - @Alex ha scritto:


    Scusa ma secondo te il wizard valorizza la variabile [s]…?

    No ovviamente quel codice lo puoi usare sulla chiamata ad InputBox…

    Il wizard è una windows form modale pertanto non intercettabile da VBA.

    Il modo per farlo c'è ma lo eviterei, devi usare SPY++ verificare il calssname della winform e se l'hWnd rimane costante come accade con i Msgbox… a quel punto capire se è child di AccessHwnd e gestire il subclassing dell'hWnd…. Da lì in Wparam o LParam  dovresti identificare la pressione del Click e provare a capire come discriminare Annulla.

    Queste cose le facevo 20anni fa ma reputo siano fuori da ogni ragionevole senso tecnico per il prodotto di Access.

    Un suggerimento… conta i Records prima dell'import e dopo e sai se rispondere TUTTO BENE o TUTTO MALE… ;-)

    Questo dovrebbe anche insegnarti che non si usano Wizard/Filtri Automatici/macro e tutte quelle amenità che semplificano le cose solo a chi non ha competenza… sono ingestibili.

    Grazie come sempre per le dritte, Alex.

    Alla fine, ho optato per il comando “TransferSpreadsheet” andando a fissare il nome del file e della cartella (dal momento che non si può selezionare l'effettivo file). In questa maniera, evito anche gli errori di chi invece di accodare alla tabella già presente nel db, decide di crearne una nuova.
    Quindi, il programma verifica la presenza del file e, se presente, lo importa, altrimenti esce dalla routine.

Devi accedere o registrarti per scrivere nel forum
3 risposte