Sviluppare funzionalita su Microsoft Office con VBA Salvare Fogli + Rename su un altro file

Login Registrati
Stai vedendo 12 articoli - dal 26 a 37 (di 37 totali)
  • Autore
    Articoli
  • #20393 Score: 0 | Risposta

    vecchio frac
    Senior Moderator
      272 pts

      Ti aspetto 🙂

      #20394 Score: 0 | Risposta

      ildavepablo
      Partecipante

        un piccolo suggerimento....

        sto lavorando sul comando SaveAs.

        ActiveWorkbook.SaveAs Filename:=perc1 & NuovoFile1

        la mia idea è: se questa riga dice dove salvare (perc1) e il nome del file (NuovoFile1), perchè non basta sostituire "perc1" con la variabile con l'indirizzo della nuova path (che ho chiamato "cartella")???

        il problema potrebbe essere l'indentatura? la prima parte della macro deve essere più a sinistra rispetto alla seconda e quindi i due salvataggi dei file nella directory devono essere indentati a dx rispetto ai comandi di creazione cartella?? ha senso mettermi a lavorare su questa ipotesi? 

         

        oppure....

        perc1 = ActiveWorkbook.Path & "\"
        percorso1 = perc1 & "DIFOT.xlsx"
        Workbooks.Open percorso

        è qui che non gli piace....

        gaaaazieeee

        #20396 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          272 pts

          ildavepablo ha scritto:

          perchè non basta sostituire

          Certo che dovrebbe bastare 🙂

          ildavepablo ha scritto:

          il problema potrebbe essere l'indentatura?

          No. Non stai sviluppando in python (che è l'unico linguaggio che io conosca a pretendere l'indentazione come parte della sintassi: se non indenti correttamente il programma fallisce). In VBA è indifferente agli spazi tra parole chiave e istruzioni (solo se poni due istruzioni sulla stessa riga devi utilizzare il separatore due punti ":").

          Fai solo attenzione che tra il percorso e il nome del file deve esserci uno slash:

          if right$(cartella, 1) <> "\" then cartella = cartella & "\"
          ActiveWorkbook.SaveAs Filename:=cartella & nomefile

          In realtà non è tecnicamente corretto neanche fare così perchè questo vale in Windows ma non in altri sistemi dove il separatore delle directory è diverso (ecco perchè nel modello a oggetti di Excel trovi Application.PathSeparator). Ma l'idea è resa 🙂

          E se il problema non è neanche questo, illustra con un esempio pratico dove il problema sia riproducibile 😉

          #20397 Score: 0 | Risposta

          vecchio frac
          Senior Moderator
            272 pts

            ildavepablo ha scritto:

            oppure....

            Non vale modificarmi i post mentre li sto leggendo 😀

            ildavepablo ha scritto:

            è qui che non gli piace....

            L'istruzione è corretta. Allora qualcosa non esiste: o il percorso, o il nome del file.

            #20399 Score: 0 | Risposta

            ildavepablo
            Partecipante

              ce l'ho FAAAAATTAAAAA!!!!!

              ActiveWorkbook.SaveAs Filename:=cartella & "\" & NuovoFile1

              #20400 Score: 0 | Risposta

              vecchio frac
              Senior Moderator
                272 pts

                 

                #23968 Score: 0 | Risposta

                ildavepablo
                Partecipante

                  Ciao Vecchio Frac,

                  tutto bene? ritorno a te con un problema che sto riscontrando con la macro che mi avevi aiutato a sviluppare.

                  faccio un breve riassunto, così non devi riprendere tutto.

                  1) macro che prende un file contenente "n" fogli

                  2) splitta i fogli e li salva "singolarmente" in un'altra cartella rinominandoli (con il valore di una cella)

                  3) prende il file di partenza e lo salva nella cartella (questa volta con tutti i fogli) e rinominandolo con la data

                  4) extra della macro: una barra di avanzamento lavori, una variabile di controllo per l'esistenza o meno della cartella.

                  Il mio problema  riguarda il punto 3) ovvero >>> la macro funziona correttamente, ma SOLO l'ultimo file (che dovrebbe essere un semplice "salva & rename") porta alla creazione di un file che è corrotto: il file è visibile e salvato nella cartella con nome ed estensione giusti, ma quando lo provo ad aprire appare il seguente messaggio:

                  messaggio di erroe

                  questa è la porzione di codice che lo genera:

                  perc1 = ActiveWorkbook.Path & "\"
                  percorso1 = perc1 & "DIFOT.xls"
                  Workbooks.Open percorso
                  
                  NuovoFile1 = "_DIFOT_" & Range("A6").Value & "_" & Format(Date, "dd") & ".xlsx"
                  ActiveWorkbook.SaveAs Filename:=cartella & "\" & NuovoFile1
                  
                  ActiveWorkbook.Close 'chiude il file appena salvato

                   ho fatto un po' di prove cambiando nome, spazi etc etc... ma non riesco a capire cosa non gli piace.

                  Potresti darmi una mano?

                  Grazie mille!!

                  #23969 Score: 0 | Risposta

                  Marius44
                  Moderatore
                    58 pts

                    Ciao

                    Una domanda: la macro il cui spezzone di codice hai mostrato dove sta?

                    Mi sembra, ma non avevo seguito il precedente e dal post precedente non lo si capisce, che stai tentando di salvare un file "con macro" come file "senza macro". Mi riferisco in particolare al suffisso che metti nel nuovo file, cioè

                    NuovoFile1 = "_DIFOT_" & Range("A6").Value & "_" & Format(Date, "dd") & ".xlsx"

                    Non dovrebbe essere .xlsm? 

                    Ciao,

                    Mario

                     

                    #23980 Score: 0 | Risposta

                    ildavepablo
                    Partecipante

                      Ciao,

                      non ho ora accesso al codice.

                      è leggermente diverso, il file che contiene la macro va ad aprire un .xls salvatp nella cartella che deve rinominare (con la data del giorno) e salvare.

                      sinceramente non è essenziale per me che il file finale sia con macro, ma se questo risove il problema, è un compromesso che posso accettare tranquillamente!

                      Grazie

                      #24011 Score: 0 | Risposta

                      ildavepablo
                      Partecipante

                        Ciao,

                        questo è il codice:

                        `Sub SalvaFoglioConNome()
                        Dim perc As String
                        Dim perc1 As String
                        Dim percorso As String
                        Dim percorso1 As String
                        Dim i As Integer
                        Dim n As Integer
                        Dim j As Integer
                        Dim NuovoFile As String
                        Dim NuovoFile1 As String
                        Dim periodo As String
                        Dim cartella As String
                        
                        Application.ScreenUpdating = False
                        Application.DisplayAlerts = False
                        
                        
                        Workbooks.Open "N:\xxxxxdifot.xls"
                        periodo = activeworkbooks & Range("A6").Value
                            
                        cartella = "xxxxx" & periodo
                        
                                If (Len(Dir(cartella, vbDirectory)) > 0) Then
                                    MsgBox "Path exists!"
                                    ' tutto ok, questa sub ha esaurito il suo compito
                                    ' perchè la cartella esiste già
                                Else
                                    MsgBox "Path will be created"
                                    ' qui creo la cartella
                                    MkDir (("N:\xxxxxx & periodo)
                                End If
                        Workbooks("difot.xls").Close
                        
                            
                        perc = ActiveWorkbook.Path & "\"
                        percorso = perc & "DIFOT.xls"
                            
                           Workbooks.Open percorso
                            
                            Load UserForm1
                            UserForm1.Show vbModeless
                            j = 0
                            n = ActiveWorkbook.Sheets.Count
                        
                            For i = 1 To ActiveWorkbook.Sheets.Count
                                j = j + 1
                                With Sheets(i)
                                    If .Range("B8") <> "" Then
                                        
                                        UserForm1.ProgressBar1.Value = (j / n) * 100
                                        'descrizione per l'utente
                                        UserForm1.Label1.Caption = "Individual Progress = " & Format((j / n) * 100, "0.00") & "%"
                                
                                        'permette l'esecuzione asincrona con altri eventi Windows
                                        DoEvents
                        
                                        .Cells.Copy                       'copia il foglio
                                        Workbooks.Add                     'crea un nuovo file
                                        ActiveSheet.Paste                 'incolla i dati
                                        'rinomina il file e lo salva
                                        NuovoFile = "DIFOT " & Range("A3").Value & " - " & Range("A6").Value & ".xlsx"
                                        ActiveWorkbook.SaveAs Filename:=cartella & "\" & NuovoFile
                                        ActiveWorkbook.Close 'chiude il file appena salvato
                                    End If
                                End With
                                
                                ' Sleep 1000
                            Next i
                            
                            Unload UserForm1
                        
                        
                        perc1 = ActiveWorkbook.Path & "\"
                        percorso1 = perc1 & "DIFOT.xls"
                        Workbooks.Open percorso
                        
                        
                        NuovoFile1 = "_DIFOT " & Range("A6").Value & " " & Format(Date, "dd") & ".xlsx"
                        ActiveWorkbook.SaveAs Filename:=cartella & "\" & NuovoFile1
                        
                        ActiveWorkbook.Close 'chiude il file appena salvato
                        
                        Application.ScreenUpdating = True
                        Application.DisplayAlerts = True
                        
                        MsgBox "PROCESS COMPLETE" & vbNewLine & "YOU CAN CLOSE NOW"
                        
                        End Sub
                        `
                        #24012 Score: 0 | Risposta

                        ildavepablo
                        Partecipante

                          ciao non so perchè ma mi sembra che post si sia cancellato... ri-posto il codice 🙂

                          Sub SalvaFoglioConNome()
                          Dim perc As String
                          Dim perc1 As String
                          Dim percorso As String
                          Dim percorso1 As String
                          Dim i As Integer
                          Dim n As Integer
                          Dim j As Integer
                          Dim NuovoFile As String
                          Dim NuovoFile1 As String
                          Dim periodo As String
                          Dim cartella As String
                          
                          Application.ScreenUpdating = False
                          Application.DisplayAlerts = False
                          
                          
                          Workbooks.Open "N:\xxxxxdifot.xls"
                          periodo = activeworkbooks & Range("A6").Value
                              
                          cartella = "xxxxx" & periodo
                          
                                  If (Len(Dir(cartella, vbDirectory)) > 0) Then
                                      MsgBox "Path exists!"
                                      ' tutto ok, questa sub ha esaurito il suo compito
                                      ' perchè la cartella esiste già
                                  Else
                                      MsgBox "Path will be created"
                                      ' qui creo la cartella
                                      MkDir (("N:\xxxxxx & periodo)
                                  End If
                          Workbooks("difot.xls").Close
                          
                              
                          perc = ActiveWorkbook.Path & "\"
                          percorso = perc & "DIFOT.xls"
                              
                             Workbooks.Open percorso
                              
                              Load UserForm1
                              UserForm1.Show vbModeless
                              j = 0
                              n = ActiveWorkbook.Sheets.Count
                          
                              For i = 1 To ActiveWorkbook.Sheets.Count
                                  j = j + 1
                                  With Sheets(i)
                                      If .Range("B8") <> "" Then
                                          
                                          UserForm1.ProgressBar1.Value = (j / n) * 100
                                          'descrizione per l'utente
                                          UserForm1.Label1.Caption = "Individual Progress = " & Format((j / n) * 100, "0.00") & "%"
                                  
                                          'permette l'esecuzione asincrona con altri eventi Windows
                                          DoEvents
                          
                                          .Cells.Copy                       'copia il foglio
                                          Workbooks.Add                     'crea un nuovo file
                                          ActiveSheet.Paste                 'incolla i dati
                                          'rinomina il file e lo salva
                                          NuovoFile = "DIFOT " & Range("A3").Value & " - " & Range("A6").Value & ".xlsx"
                                          ActiveWorkbook.SaveAs Filename:=cartella & "\" & NuovoFile
                                          ActiveWorkbook.Close 'chiude il file appena salvato
                                      End If
                                  End With
                                  
                                  ' Sleep 1000
                              Next i
                              
                              Unload UserForm1
                          
                          
                          perc1 = ActiveWorkbook.Path & "\"
                          percorso1 = perc1 & "DIFOT.xls"
                          Workbooks.Open percorso
                          
                          
                          NuovoFile1 = "_DIFOT " & Range("A6").Value & " " & Format(Date, "dd") & ".xlsx"
                          ActiveWorkbook.SaveAs Filename:=cartella & "\" & NuovoFile1
                          
                          ActiveWorkbook.Close 'chiude il file appena salvato
                          
                          Application.ScreenUpdating = True
                          Application.DisplayAlerts = True
                          
                          MsgBox "PROCESS COMPLETE" & vbNewLine & "YOU CAN CLOSE NOW"
                          
                          End Sub
                          
                          #24074 Score: 0 | Risposta

                          ildavepablo
                          Partecipante

                            Ciao,

                            sto facendo delle prove, cambiando il codice in questo modo per vedere se funziona... togliendo il riferimento della cella e mettendo tutto nel nome con il "format date".

                            questo:

                            NuovoFile1 = "_DIFOT " & Range("A6").Value & " " & Format(Date, "dd") & ".xlsx"

                            trasformato in:

                            NuovoFile1 = "_DIFOT " & Format(Date, "mm dd") & ".xlsx"

                            sto facendo un po' di esperimenti con il comando "date", vediamo se riesco a risolvere il problema

                          Login Registrati
                          Stai vedendo 12 articoli - dal 26 a 37 (di 37 totali)
                          Rispondi a: Salvare Fogli + Rename su un altro file
                          Gli allegati sono permessi solo ad utenti REGISTRATI
                          Le tue informazioni: