Come intercettare pulsante annulla - risolto

di Marcdreamer il
3 risposte

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

  • 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.

  • 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