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

    thunder
    Partecipante

      Ciao,

       

      di seguito il mio quesito:

       

      In una cartella windows ho un file in formato .csv il cui nome può variare ma non la cartella in cui si trova . Vorrei come prima operazione salvare il csv in formato .xls in una cartella predefinita e nominarlo come pippo e la data odierna in formato inglese (es pippo20181219)

      Infine vorrei poter importare tramite macro il csv all'interno del file .xlsm su cui lavoro. L'incognita di base è che il nome del file .csv non è costante

      Grazie in anticipo

      #9643 Score: 0 | Risposta

      Luca73
      Partecipante
        58 pts

        Ciao

        Nella cartella hai più file?

        C'è un parametro con cui selezionare quello che vuoi importare?

        Per esempio vuoi importare il file con la daata uguale a qulla contenuta nella cella XY

        Altra possibilità selezionare il file tramite una finestra come quella usata da excel per aprire o salvare un file.

        Ciao

        Luca

        #9644 Score: 0 | Risposta

        thunder
        Partecipante

          Ciao nella cartella dove si trova il .csv c'è sempre e solo un file .csv. Vorrei poterlo salvare senza doverlo selezionare tramite finestra. Stessa cosa per l'importazione all'interno del file .xlsm; dato che il file csv è uno solo vorrei evitare di specificarlo. L'unica variabile è appunto il nome.

          Se non vengono cambiati i formati (tipo numero, testo..)se risulta più semplice si potrebbe importare direttamente il file excel precedentemente salvato.

          #9645 Score: 0 | Risposta

          Luca73
          Partecipante
            58 pts

            Quando salvi il file elimini il precedente?

            Se quando importi c'è solo un file, il gioco è fatto, si importa quello a prescindere dal nome.

            #9646 Score: 0 | Risposta

            thunder
            Partecipante

              si si sto predisponendo la procedura in maniera tale da avere sempre solo un file nella cartella 

              #9724 Score: 1 | Risposta

              Luca73
              Partecipante
                58 pts

                Prima parte

                Sub CopiaCSVtoXlsx()
                Dim FolderOrig As String
                Dim FolderDest As String
                Dim NomeFile As String
                Dim mioWB As Workbook
                Dim Aggiunta
                
                FolderOrig = "C:\Users\ma036650\Desktop\AA"
                FolderDest = "C:\Users\ma036650\Desktop\BB"
                NomeFile = "pippo"
                Aggiunta = ""
                On Error GoTo GestErr
                Set mioWB = Workbooks.Open(Filename:=FolderOrig & "\" & Dir(FolderOrig & "\*.csv"))
                mioWB.SaveAs Filename:=FolderDest & "\" & NomeFile & Format(Date, "yyyymmdd") & Format(Aggiunta, "_00") & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
                mioWB.Close
                Exit Sub
                GestErr:
                If Aggiunta = "" Then
                    Aggiunta = 1
                Else
                    Aggiunta = Aggiunta + 1
                End If
                Resume
                End Sub
                

                La macro qui sopra cerca il primo file che trova nella cartella FolderOrig (puoi o scriverla o collegarla ad una cella) lo apre e lo salva come xlsx nella  FolderDest. In caso lo trovi già esistemte aggiunge un "_0x".

                Il nome del file di arrivo è NomeFile più la data. NomeFile è definito all'interno della macro ma può essere collegato ad una cella.

                Cosa ne pensi? fa al caso tuo?

                Ciao

                Luca

                 

                #9725 Score: 0 | Risposta

                Luca73
                Partecipante
                  58 pts

                  L'aggiunta dell'istruzione 

                  Kill (FolderOrig & "\" & Dir(FolderOrig & "\*.csv"))

                  dopo mioWB.Close

                  ti permette di eliminare (cancellare) il file originale.

                  #9726 Score: 0 | Risposta

                  Luca73
                  Partecipante
                    58 pts

                    Riguardo all'importare il csv nel file corrente la cosa è semplice da fare ma abbastanza complicato generalizzarla in quanto l'importazione dipende da tutti i parametri che tu determini quando importi (ovvero se sono campi a lunghezza fissa o delimitata, il tipo di delimitatore, se importi tutte le righe o no, se importi in un nuovo foglio oppure no,....) insomma tutte le cose che dici a excel quando importi un csv.

                    a tal file ti consiglio di registrare una macro come importi tu. poi il nome del file lo puoi trovare come vedi nella macro precedente e poi modifiche la macro registrata pe rle tue esigenze.

                    fammi sapere.

                    Ciao

                    Luca

                     

                    #9727 Score: 0 | Risposta

                    thunder
                    Partecipante

                      Ciao! Innanzi tutto grazie.

                      Dunque ho provato la macro e apre il .csv e lo esporta correttamente con il nome. L'unico problema è che il file esportato il .xlsx rimane con i delimitatori di testo (punto e virgola) e non diviso. Provo a spiegarmi meglio: se apro il csv direttamente con Excel il file è diviso correttamente nelle colonne. Uguale risultato se lo provo ad esportare in manuale.

                      Ti allego il file .csv di prova 

                      #9729 Score: 0 | Risposta

                      Luca73
                      Partecipante
                        58 pts

                        Il file non è allegato

                         

                        #9730 Score: 0 | Risposta

                        thunder
                        Partecipante

                          lo so non riesco ad allegare i file .csv . Mi compare questo errore

                          <em>Errori di caricamento:</em>
                          <em>esempio.csv: Questo tipo di file non è permesso per ragioni di sicurezza.</em>

                           

                          Aggiornamento

                          L'ho caricato tramite .rar!

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

                          Luca73
                          Partecipante
                            58 pts

                            non riesco ad aprrirlo riesci a mettere un file.zip?

                             

                            #9735 Score: 0 | Risposta

                            thunder
                            Partecipante

                              Certo! in allegato il file in formato zip

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

                              Luca73
                              Partecipante
                                58 pts

                                Ciao

                                ho dovuto complicarla un pochino per risolvere il problema

                                Ho pensato che hai detto che dovevi importare il file .csv nel tuo file xlsm.

                                L'ho implementato creando un foglio che si chiama IMPORT.

                                Successivamente tale foglio viene salvato in una cartella diversa e salvata nel folder di destinazione.

                                Fammi sapere se il 

                                Sub CopiaCSVtoXlsx()
                                Dim FolderOrig As String
                                Dim FolderDest As String
                                Dim NomeFile As String
                                Dim mioWB As Workbook
                                Dim OrigWB As Workbook
                                Dim mioFGL As Worksheet
                                Dim FoglioW As Worksheet
                                Dim Aggiunta
                                
                                Set OrigWB = ActiveWorkbook
                                ' assegno alla variabile il Workbook attivo
                                
                                FolderOrig = "C:\Users\ma036650\Desktop\AA" 'cartella di rigine
                                FolderDest = "C:\Users\ma036650\Desktop\BB" 'cartella di destinazione
                                NomeFile = "pippo" 'nome assegnato al file prima della data
                                Aggiunta = "" 'variaile per gestire il nome file in caso di errore
                                On Error GoTo ErroreFoglio
                                OrigWB.Sheets("IMPORT").Select 'usando la gestione erori veirfico se il foglio esiste se non esiste lo creo
                                
                                Set mioFGL = OrigWB.Sheets("IMPORT") 'assegno il folgio alla variabile
                                mioFGL.Cells.Clear 'cancello il contenuto del folgio
                                ' da qui in avanti importo i dati
                                With mioFGL.QueryTables.Add(Connection:= _
                                    "TEXT;" & FolderOrig & "\" & Dir(FolderOrig & "\*.csv"), Destination:=Range("$A$1"))
                                    .Name = "esempio"
                                    .FieldNames = True
                                    .RowNumbers = False
                                    .FillAdjacentFormulas = False
                                    .PreserveFormatting = True
                                    .RefreshOnFileOpen = False
                                    .RefreshStyle = xlInsertDeleteCells
                                    .SavePassword = False
                                    .SaveData = True
                                    .AdjustColumnWidth = True
                                    .RefreshPeriod = 0
                                    .TextFilePromptOnRefresh = False
                                    .TextFilePlatform = 1250
                                    .TextFileStartRow = 1
                                    .TextFileParseType = xlDelimited
                                    .TextFileTextQualifier = xlTextQualifierDoubleQuote
                                    .TextFileConsecutiveDelimiter = False
                                    .TextFileTabDelimiter = False
                                    .TextFileSemicolonDelimiter = True
                                    .TextFileCommaDelimiter = False
                                    .TextFileSpaceDelimiter = False
                                    .TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)
                                    .TextFileTrailingMinusNumbers = True
                                    .Refresh BackgroundQuery:=False
                                End With
                                
                                
                                Set mioWB = Workbooks.Add 'creo un nuovo workbook
                                mioFGL.Copy Before:=mioWB.Sheets(1) 'copio il file nel nuovo workbook
                                Application.DisplayAlerts = False 'questo per evitare che mi chieda se volgio veramente cancella re il foglio
                                For Each FoglioW In mioWB.Sheets 'routine per cancella re i fogli diversi da IMPORt nel novo workbook
                                    If Not FoglioW.Name = mioFGL.Name Then
                                        FoglioW.Delete
                                    End If
                                Next FoglioW
                                Application.DisplayAlerts = True
                                On Error GoTo GestErr
                                ' qui sotto salvo il workbook nuovo nel folder di destinazione con il nome ugiule a qllo scelto più la data
                                mioWB.SaveAs Filename:=FolderDest & "\" & NomeFile & Format(Date, "yyyymmdd") & Format(Aggiunta, "_00") & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
                                mioWB.Close 'chiudo il file
                                ' l'istruzione qui sotto mi cancella il file csv (se serve cancellarlo basta togliere l'apice)
                                'Kill (FolderOrig & "\" & Dir(FolderOrig & "\*.csv"))
                                
                                Exit Sub
                                
                                ErroreFoglio:
                                With Sheets.Add
                                    .Name = "IMPORT"
                                End With
                                Resume
                                
                                
                                GestErr:
                                If Aggiunta = "" Then
                                    Aggiunta = 1
                                Else
                                    Aggiunta = Aggiunta + 1
                                End If
                                Resume
                                End Sub
                                
                                #9777 Score: 0 | Risposta

                                thunder
                                Partecipante

                                  Perfetta! Funziona alla grande, grazie anche per aver commentato i passaggi. Ti volevo chiedere solo se mi potevi spiegare perché nella macro precedente l'esportazione variava i dati. Come l'avevi impostata per quel che ne capisco mi sembrava corretta, apriva il foglio .csv e lo salvava nel formato giusto..

                                  #9779 Score: 0 | Risposta

                                  Luca73
                                  Partecipante
                                    58 pts

                                    Ciao non lo so non l'ho capito.

                                    Ho fatto altre prove con altri parametri ma non ci sono riuscito....

                                    Ho provato anche con il regisratore. Aprendola la prima volta era corretta, aprendola da macro non funzionava.

                                    Bho....A volte non capisco.

                                    Ciao

                                    Luca

                                  Login Registrati
                                  Stai vedendo 16 articoli - dal 1 a 16 (di 16 totali)
                                  Rispondi a: Salvataggio CSV
                                  Gli allegati sono permessi solo ad utenti REGISTRATI
                                  Le tue informazioni: