[RISOLTO] Stesso codice risultato diverso

di il
11 risposte

[RISOLTO] Stesso codice risultato diverso

Ho ereditato un grosso database, col tempo ho fatto delle modifiche adattandolo alle mie esigenze. Grazie a questo ho pure cominciato ad approcciare col VBA, ma mi trovo in un caso che va fuori dalle mie competenze.

Uso più o meno lo stesso codice (cambia solo il nome del file che deve aprire ed ovviamente il nome delpulsante) su 2 maschere diverse dello stesso database:

Private Sub Btn_pulsante_Click()
   mdir = CurrentProject.Path
   DoCmd.OutputTo acOutputQuery, "Miaquery", "*.xlsx", mdir & "\StUn\StUnCS.XLSX"
   Set objshell = CreateObject("Shell.Application")
   mpat = mdir & "\StUn\Miofile.docx"
   objshell.Open mpat
  Exit_Btn_MalattiaMinSingola_Click:
   DoCmd.Close acForm, "Maschera1 800x600"
   Exit Sub
Err_Btn_MalattiaMinSingola_Click:
   MsgBox Err.Description
   Resume Exit_Btn_MalattiaMinSingola_Click
End Sub

In una maschera fila tutto liscio, nell'altra invece mi appaiono degli errori che dicono che sia “mdir” che “objshell” non sono definite.
Nella prima maschera non le avevo definite e funzionavano tranquillamente, anzi pensavo fossero una sorta di variabili d'ambiente.
Perché mi succede ciò e come dovrei definirle?

11 Risposte

  • Re: [RISOLTO] Stesso codice risultato diverso

    Le variabili mdir e mpath sono stringhe quindi evidentemente

    Dim mdir As String

    Dim mpat As String

    L'altra è un oggetto quindi

    Dim objshell As Object

    Dovresti leggere qualcosa sulle basi del VBA per essere indipendente su queste problematiche di base

  • Re: [RISOLTO] Stesso codice risultato diverso

    26/11/2023 - Azucarea ha scritto:


    mi appaiono degli errori che dicono che sia “mdir” che “objshell” non sono definite

    Vuoi vedere che nel modulo della prima maschera non c'è all'inizio Option Explicit mentre nel secondo, quello che dà errore, c'è?

    Ecco che fare quanto ha detto Oregon diventa inevitabile: sempre Option Explicit all'inizio di ogni modulo.

  • Re: [RISOLTO] Stesso codice risultato diverso

    26/11/2023 - oregon ha scritto:


    Dovresti leggere qualcosa sulle basi del VBA per essere indipendente su queste problematiche di base

    Intanto volevo rigraziarvi per le vostre preziose risposte, ho scritto all'inizio che mi sono appena approcciato col VBA, inoltre non ho mai imparato professionalmente un linguaggio di programmazione, se non a livello amatoriale di principiante autodidatta di vecchi linguaggi ormai vetusti (tipo il Basic del Commodore 64 (non visual basic), Pascal, DOS, ecc…, però imparo facilmente per intuizione.

    26/11/2023 - Philcattivocarattere ha scritto:


    26/11/2023 - Azucarea ha scritto:


    mi appaiono degli errori che dicono che sia “mdir” che “objshell” non sono definite

    Vuoi vedere che nel modulo della prima maschera non c'è all'inizio Option Explicit mentre nel secondo, quello che dà errore, c'è?

    Proprio così, hai azzeccato! In una c'è all'inizio Option Explicit mentre nell'altra no. Inoltre c'è anche Option Compare Database.

    26/11/2023 - oregon ha scritto:


    Le variabili mdir e mpath sono stringhe quindi evidentemente

    Dim mdir As String

    Dim mpat As String

    L'altra è un oggetto quindi

    Dim objshell As Object

    Le prime 2 hanno funzionato, la terza non dà alcun effetto, dovrebbe far aprire un file dopo le istruzioni successive

  • Re: [RISOLTO] Stesso codice risultato diverso

    27/11/2023 - Azucarea ha scritto:


    la terza non dà alcun effetto, dovrebbe far aprire un file dopo le istruzioni successive

    L'ultima Dim serve per la variabili objshell ed è necessaria. Se non vedi il file, probabilmente il percorso o il nome sono sbagliati.

    Controlla il contenuto di mpat prima della Open. Magari aggiungi un

    MsgBox mpat

    prima della Open per controllare effettivamente percorso e nome di file

  • Re: [RISOLTO] Stesso codice risultato diverso

    Il percorso coincide tant'è vero che se tolgo Option Explicit e elimino le dichiarazioni delle variabili si apre tranquillamente, confermato anche dall'istruzione che mi hai fatto aggiungere.
    Può darsi sbaglio a la posizione della dichiarazione, ma ho provato ad inserire tutte e 3 sia all'inizio (subito dopo Private Sub Btn_pulsante_Click() ), sia prima di ogni istruzione relativa.

  • Re: [RISOLTO] Stesso codice risultato diverso

    Però ho fatto la prova a sostistuire l'intero percorso ad mpat in 

    objshell.Open mpat

    ed ha funzionato. Eppure ho controllato più volte il percorso ed è lo stesso, non è che bisogna dichiarare la variabile mpat in modo diverso prima dell'apertura?

  • Re: [RISOLTO] Stesso codice risultato diverso

    27/11/2023 - Azucarea ha scritto:


    l'intero percorso

    contiene forse caratteri particolari (non vietati, ovviamente), spazi o si tratta di uno di quei percorsi che sono Windows riesce a capire? (in esplora file scrivi Programmi ed è Programs o Programs (x86) in riga comandi, stessa cosa per Utenti con Users… ecco perché io metto tutto in una directory normale).

  • Re: [RISOLTO] Stesso codice risultato diverso

    Nel codice manca anche la On Error (altrimenti a che serve la gestione errori ?)

    Dovrebbe essere questo

    Private Sub Btn_pulsante_Click()
      Dim mdir As String
      Dim mpat As String
      Dim objshell As Object
      
      On Error GoTo Err_Btn_MalattiaMinSingola_Click:
    
      mdir = CurrentProject.Path
      DoCmd.OutputTo acOutputQuery, "Miaquery", "*.xlsx", mdir & "\StUn\StUnCS.XLSX"
      Set objshell = CreateObject("Shell.Application")
      mpat = mdir & "\StUn\Miofile.docx"
      objshell.Open (mpat)
    
    Exit_Btn_MalattiaMinSingola_Click:
      Set objshell = Nothing
      DoCmd.Close acForm, "Maschera1 800x600"
      Exit Sub
      
    Err_Btn_MalattiaMinSingola_Click:
      MsgBox Err.Description
      Resume Exit_Btn_MalattiaMinSingola_Click      
    End Sub
  • Re: [RISOLTO] Stesso codice risultato diverso

    27/11/2023 - oregon ha scritto:


    On Error GoTo Err_Btn_MalattiaMinSingola_Click:

    Si, grazie dev'essersi persa durante le varie prove.

    27/11/2023 - Philcattivocarattere ha scritto:


    27/11/2023 - Azucarea ha scritto:


    l'intero percorso

    contiene forse caratteri particolari (non vietati, ovviamente), spazi o si tratta di uno di quei percorsi che sono Windows riesce a capire? (in esplora file scrivi Programmi ed è Programs o Programs (x86) in riga comandi, stessa cosa per Utenti con Users… ecco perché io metto tutto in una directory normale).

    caratteri particolari no, spazi sì ed anche una cartella dal nome lungo composto da 3 parole. Ho provato a fare una copia di tutti i file in C (quindi senza spazi), ma non funziona lo stesso

  • Re: [RISOLTO] Stesso codice risultato diverso

    27/11/2023 - Azucarea ha scritto:


    Si, grazie dev'essersi persa durante le varie prove.

    Ma hai provato il codice che ti ho indicato? 

    Non hai detto nulla …

  • Re: [RISOLTO] Stesso codice risultato diverso

    27/11/2023 - oregon ha scritto:


    27/11/2023 - Azucarea ha scritto:


    Si, grazie dev'essersi persa durante le varie prove.

    Ma hai provato il codice che ti ho indicato? 

    Non hai detto nulla …

    Grazie! Ha funzionato! Pensavo avessi aggiunto solo la stringa per l'errore e nient'altro invece adesso mi sono accorto di mpat tra parentesi (mpat) ed ha funzionato.

    Stavo per scrivere che aveva funzionato anche scrivendo:

    objshell.Open CurrentProject.Path & "\StUn\Miofile.docx"

     Altra aggiunta notata:

    Set objshell = Nothing
Devi accedere o registrarti per scrivere nel forum
11 risposte