Sviluppare funzionalita su Microsoft Office con VBA salvare nella stessa cartella del file

Login Registrati
Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
  • Autore
    Articoli
  • #11955 Score: 0 | Risposta

    marco_budin
    Partecipante
      2 pts

      buonasera a tutti,

      mi rivolgo a voi perché ho un problema che non riesco a risolvere. Ho un file modello con attivazione macro .xltm, quando lo apro devo poter schiacciare sui vari tasti in alto: stampa... salva.... e quello funziona. Il mio problema è che se stampo... nella funziona c'è una parte che dice di stampare anche una copia in pdf. del documento stampato nella stessa cartella dove si trova il file modello. stessa cosa, il tasto salva, deve infatti salvare con nome nella stessa cartella questa volta in formato normale .xlsm. Ma purtroppo non lo fa e non capisco perché...

      codice salvataggio:

      Sub Salva_con_nome_S()
      
      If MsgBox("Attenzione:  il file verrà salvato con nome e si chiuderà in automatico. Procedere?", vbYesNo, "Speichern") = vbYes Then
      
      Dim fName As String
       
       Worksheets("Gestione").Select
       fName = Sheets("Gestione").Range("h11")
       Dim relativePath As String
          relativePath = ThisWorkbook.Path & "\" & fName
          
          ActiveWorkbook.SaveAs Filename:=relativePath, FileFormat:= _
              xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
      
      Application.Quit
      
      End If
      End Sub

      codice stampa:

      Public Sub Stampante_senza_dettaglio()
      Application.Dialogs(xlDialogPrinterSetup).Show
      Sheets("LetteraPreventivoForfait").PrintOut Copies:=1, Collate:=True, _
      IgnorePrintAreas:=False
         
      Dim fName As String
      Dim relativePath As String
      
      Worksheets("Gestione").Select
      fName = Range("h11").Value
      relativePath = ThisWorkbook.Path & "\" & fName
      
      Sheets("LetteraPreventivoForfait").Select
      ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
                  relativePath, Quality:=xlQualityStandard, _
                  IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
         
      Sheets("Gestione").Select
      Range("h14").Select
       End Sub

       

      Ho provato a farlo con il file non modello... quindi .xlsm e li il codice funziona... e non capisco perché!!  vi allego tutte e due i file...

      per me sarebbe importante poterlo mettere sul modello, in quando così il file rimane sempre vergine. Spero che qualcuno possa aiutarmi. in attesa vi ringrazio anticipatamente come sempre, e vi auguro una buona serata

      Marco

      Allegati:
      You must be logged in to view attached files.
      #11957 Score: 0 | Risposta

      marco_budin
      Partecipante
        2 pts

        mi dovete scusare,

        non sono riuscito a caricarvi il file in formato xltm (modello con attivazione macro)... perché il vostro sistema lo blocca... ce scritto: questo tipo di file non è permesso per ragioni di sicurezza... Penso se prendete il file e lo salvate con nome in formato xltm riuscite a fare delle prove...

        vi ringrazio ancora molto e vi auguro una buona serata

        marco

        #11960 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          247 pts

          Ho scaricato il file xlsm e l'ho convertito in modello. Se preferisci allegare il modello originale allora zippalo e riallegalo, quello verrà accettato sicuramente dal sistema.

          Nel merito intanto non trovo il pulsante che scatena il "salvataggio senza dettaglio" a cui è associata la sub cui ti riferisci.

          #11961 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            247 pts

            Comunque il problema è in relativePath che non è valorizzato (è una stringa vuota) e quindi la costruzione del filename fallisce; ti spiego perchè: quando attivi un file normale (xlsm) questo ha già un nome e un percorso, perciò le varie routine che vi si riferiscono trovano un valore di path e filename correttamente valorizzato. Invece, quando attivi un file modello, questo genera un file (basato su modello) che non viene salvato da Excel: prova ne è che quando apri il file modello facendo doppio click su esso e fai qualunque modifica, poi tenti di chiuderlo, Excel ti chiede di salvarlo e ti propone la finestra di Save As. Solo allora quel file basato sul modello avrà un nome e un percorso, e infatti diventa un normale file xlsm.

            Ma prima no: esiste solo in memoria, ed è per questo che Thisworkbook.Path è vuoto e di conseguenza la stringa relativepath ha un valore non corretto inizia con lo slash e ha il valore della cella H11).

            Ora ti cerco un modo semplice per ovviare (ne ho in mente diversi ma te ne propongo qualcuno di facile)

            #11962 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              247 pts

              Penso che il consiglio migliore sia di testare il valore di relativepath prima del comando (di salvataggio o di stampa) e se è vuoto, forzarlo a un valore predefinito (per esempio la cartella desktop dell'utente o la sua cartella documenti o una cartella condivisa in rete).

              Esempio:

              Sub Salva_con_nome_S()
              
              If MsgBox("Attenzione:  il file verrà salvato con nome e si chiuderà in automatico. Procedere?", vbYesNo, "Speichern") = vbYes Then
              
              Dim fName As String
               
               Worksheets("Gestione").Select
               fName = Sheets("Gestione").Range("h11")
               Dim relativePath As String
                  if thisworkbook.path = "" then
                      relativepath = environ("userprofile") & "\desktop\" & fname   
                  else
                      relativePath = ThisWorkbook.Path & "\" & fName
                  end if
                  
                  ActiveWorkbook.SaveAs Filename:=relativePath, FileFormat:= _
                      xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
              
              Application.Quit
              
              End If
              End Sub
              #11963 Score: 0 | Risposta

              marco_budin
              Partecipante
                2 pts

                Ciao vecchio fac,

                sei fantastico, ti ringrazio davvero moltissimo, sia per la spiegazione dettagliata che mi hai dato e la soluzione che ho provato e funziona! Quindi non c’è la possibilità di vedere dove è salvato il modello e salvarlo nella sua cartella. Infatti avevo notato che con percorsi precisi si poteva risolvere il problema, ma visto che è un file che gira, non sapendo dove i colleghi lo salvano era più semplice far fare che salvasse dove viene messo il modello.

                ti ringrazio davvero ancora moltissimo e ti auguro una buona serata!

                marco

                #11964 Score: 0 | Risposta

                vecchio frac
                Senior Moderator
                  247 pts

                  marco_budin ha scritto:

                  non c’è la possibilità di vedere dove è salvato il modello

                  Bè posso provare a interessarmi e se trovo qualcosa lo comunico 🙂

                  #11966 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    247 pts

                    Ho trovato una routine in internet (su stackoverflow) che sembra funzionare, però non so quanto valga la candela perchè ci mette un bel po' a dare un risultato ed è anche inaffidabile perchè può fallire. In pratica conoscendo il nome del modello fa una scansione delle directory e dei file della macchina locale finchè non lo trova (che però se l'utente cambia il nome del file modello, salta il banco).

                    #11967 Score: 0 | Risposta

                    vecchio frac
                    Senior Moderator
                      247 pts

                      In alternativa, invece di usare un file modello, puoi usare un file normale (per cui esiste quindi un percorso di salvataggio), in fondo ha la stessa funzionalità (si usa un file modello depositandolo in una cartella comune che poi per esempio ogni utente può attivare per farsi la propria copia locale. Nel tuo caso, visto che devi avere sempre una copia originale immacolata, puoi forzare un SaveAs all'apertura del file stesso e quindi lavorare sempre su una copia (per eccesso di scrupolo puoi anche settare l'attributo Readonly del file originale così questo non verrà sovrascritto neanche per errore).

                      #11972 Score: 0 | Risposta

                      marco_budin
                      Partecipante
                        2 pts

                        Ciao vecchio frac!! Ti ringrazio davvero tantissimo per le tue idee e la tua ricerca, per ovviare al mio problema. Si hai ragione la cosa più semplice è che il file lo si apre in Solo lettura e quindi sarebbe comunque salvo, e nessuno potrebbe sovrascriverlo!

                        grazie davvero per L aiuto e ti auguro una buona giornata

                      Login Registrati
                      Stai vedendo 10 articoli - dal 1 a 10 (di 10 totali)
                      Rispondi a: salvare nella stessa cartella del file
                      Gli allegati sono permessi solo ad utenti REGISTRATI
                      Le tue informazioni: