Sviluppare funzionalita su Microsoft Office con VBA sincronizzare tra file excel nel pc e sito

Login Registrati
Stai vedendo 25 articoli - dal 26 a 50 (di 78 totali)
  • Autore
    Articoli
  • #13122 Score: 0 | Risposta

    dariotoby
    Partecipante

      si è questo che volevo dire. Quindi posso modificare nel file bat con questo codice?

      set x="ThisWorkbook.Path & "\" Tabella News Febbraio.csv"

      Però anche qui c'è il problema di cambiare ogni mese il codice da Febbraio a Marzo ecc.

      Intanto metto questo poi quando mi darai il codice completo vedremo.

       

      #13124 Score: 0 | Risposta

      dariotoby
      Partecipante

        no in questo modo non funziona e neanche in questo

        set x="ThisWorkbook.Path\Tabella News Febbraio.csv"

        #13125 Score: 0 | Risposta

        vecchio frac
        Senior Moderator
          248 pts

          No, purtroppo nel file bat questa cosa non funzionerà 🙂

          Bisogna che sia il codice stesso a cambiare il file bat ed è per questo che deve essere in un percorso noto a priori. Con lo stesso sistema, sarà il codice a cambiare mese opportunamente, modificando il file bat.

          #13129 Score: 0 | Risposta

          dariotoby
          Partecipante

            capito

            #13400 Score: 0 | Risposta

            vecchio frac
            Senior Moderator
              248 pts

              Ecco la mia proposta, da testare, tutto in un modulo.

              Option Explicit
              
              Sub CreaBAT(ByVal m As String)
              Dim f As Variant, sBat As Variant, s As String
              
                  f = ThisWorkbook.Path & "\test.bat"
                  Open f For Binary As #1
                  
                  sBat = Split( _
                      "@echo off," & _
                      ":: CSV file path + filename," & _
                      "Set x = " & Chr(34) & "%userprofile%\OneDrive\karaoke\Tabella News " & m & ".csv" & Chr(34) & "," & _
                      ":: Echo the FTP commands to a text file," & _
                      "echo open ftp.love4music.altervista.org>ftpcmdtemp.txt," & _
                      "echo love4music>>ftpcmdtemp.txt," & _
                      "echo mia password>>ftpcmdtemp.txt," & _
                      "echo binary>>ftpcmdtemp.txt," & _
                      "echo cd Tabelle_news >>ftpcmdtemp.txt," & _
                      "echo put %x%>>ftpcmdtemp.txt," & _
                      "echo quit>>ftpcmdtemp.txt," & _
                      ":: FTP Execution Commands," & _
                      "ftp -s:ftpcmdtemp.txt %x%", ",")
                      
                  s = Join(sBat, vbNewLine)
                  Put #1, , s
                  Close #1
              
              End Sub
              
              
              Sub SalvaCSV()
              Dim percorso As String
              Dim nome As String
              Dim mese As String
              
                  percorso = ThisWorkbook.Path & "\"
                  nome = "Tabella News "
                  
                  mese = InputBox("Scrivi il nome del mese:")
                  
                  With ActiveSheet
                      .Copy
                      .SaveAs Filename:=percorso & nome & mese & ".csv", _
                          FileFormat:=xlCSV, Password:="", WriteResPassword:="", _
                          ReadOnlyRecommended:=False, CreateBackup:=False, Local:=True
                  End With
                  
                  CreaBAT mese
                  CreateObject("WScript.Shell").Run Chr(34) & ThisWorkbook.Path & "\test.bat" & Chr(34)
                  
              End Sub

              Quando SalvaCSV viene lanciato, chiede il mese da processare, quindi crea il file csv, crea il file bat e lo esegue, tutto nella medesima cartella di dove viene eseguito il file Excel.

              #13401 Score: 0 | Risposta

              dariotoby
              Partecipante

                Ok buono lo provo oggi pomeriggio grazie

                #13420 Score: 0 | Risposta

                dariotoby
                Partecipante

                  Allora lo sto provando e mi da errore run time riga 52 mi crea il file csv mi dice di scrivere il nome del mese, ma mi trovo aperto un file chiamato Cartel1 con il foglio Tabelle News e penso come estensione sia xlsx e poi il file  Tabella News Marzo.xlsm è diventato Tabella News Marzo.csv sempre che rimane aperto. Ma si è chiuso quello xlsm

                  Open f For Binary As #1
                  #13422 Score: 0 | Risposta

                  vecchio frac
                  Senior Moderator
                    248 pts

                    Proviamo una piccola correzione.

                    Sostituisci il codice  di SalvaCSV con questo:

                    Sub SalvaCSV()
                    Dim percorso As String
                    Dim nome As String
                    Dim mese As String
                    Dim wb As Workbook
                    
                        percorso = ThisWorkbook.Path & "\"
                        nome = "Tabella News "
                        
                        mese = InputBox("Scrivi il nome del mese:")
                        
                        Set wb = ThisWorkbook
                        
                        Application.DisplayAlerts = False
                    
                        wb.Sheets("Tabella News").Copy
                        ActiveWorkbook.SaveAs Filename:=percorso & nome & mese, FileFormat:=xlCSV, CreateBackup:=False
                        ActiveWorkbook.Close False
                        
                        Application.DisplayAlerts = True
                    
                        CreaBAT mese
                        CreateObject("WScript.Shell").Run Chr(34) & ThisWorkbook.Path & "\test.bat" & Chr(34)
                        
                    End Sub
                    #13423 Score: 0 | Risposta

                    dariotoby
                    Partecipante

                      Sono rimasti solo piccoli problemi non capisco del perchè salva il file csv con la data invertita nel file excel esempio è 01/03/2019 mentre nel file csv diventa 03/01/2019

                      Poi non capisco perchè il file bat se lo eseguo come amministratore dal file creato nella cartella quello che usavo fino ad ieri mi funziona tutto ok, mi compare la pagina dos fa delle scritte veloci e poi scompare e sopratutto funziona.

                      Invece quello creato dalla macro anche se a confrontarli sono uguali mi compare la pagina dos e mi rimane aperta ti faccio uno screenshot in allegato ma non funziona si connette al server ma non mi aggiorna il file nel server. Boo se volessi provare puoi vedere eventualmente in questo sito la tabella uppata https://love4music.altervista.org/news-del-mese-di-marzo-2019/

                      Ti allego anche il file excel. La macro è all'interno ancora non ho creato il pulsante.

                      Poi non voglio esagerera della tua bonta ma posso chiederti un altra cosa giustamente quando hai modo e tempo.

                      Nel file excel Tabella News Marzo nel foglio Sistemazione le colonne F G H  come vedi vengono trasposte nel foglio Per gli spedizionieri  Mi spiego F4 in A2 - G4 in A3 e H4 in A4 e cosi a scendere

                      Grazie per la tua disponibilità

                       

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

                      vecchio frac
                      Senior Moderator
                        248 pts

                        dariotoby ha scritto:

                        nel file excel esempio è 01/03/2019 mentre nel file csv diventa 03/01/2019

                        Una distrazione da parte mia. Ho omesso di specificare il parametro Local durante il salvataggio in formato csv, così la data viene interpretata invertita. La correzione al codice è:

                        ActiveWorkbook.SaveAs Filename:=percorso & nome & mese, FileFormat:=xlCSV, CreateBackup:=False, Local:=True
                        

                        dariotoby ha scritto:

                        il file bat se lo eseguo come amministratore dal file creato nella cartella quello che usavo fino ad ieri mi funziona tutto ok

                        Probabilmente ci vuole il permesso da amministratore a livello di codice. Sto facendo delle prove con "runas" ma alla cieca perchè non sono in grado di fare alcun ftp. Appena sono quasi sicuro ti riallego il codice da riprovare.

                        dariotoby ha scritto:

                        Mi spiego F4 in A2 - G4 in A3 e H4 in A4 e cosi a scendere

                        E quindi vorresti farlo da codice? Immagino prima della creazione ed esecuzione del file bat

                         

                        #13438 Score: 0 | Risposta

                        dariotoby
                        Partecipante

                          vecchio frac ha scritto:

                          Probabilmente ci vuole il permesso da amministratore a livello di codice. Sto facendo delle prove con "runas" ma alla cieca perchè non sono in grado di fare alcun ftp. Appena sono quasi sicuro ti riallego il codice da riprovare.

                          In che senso ti manca la password? se ti ho dato il file excel è per questo oltre al fatto che puoi così fare le prove con lo stesso file che ti ho dato.

                          vecchio frac ha scritto:

                          E quindi vorresti farlo da codice? Immagino prima della creazione ed esecuzione del file bat

                          No come macro apparte. Creerò un pulsante apparte e lo farò quando mi serve.

                          #13439 Score: 0 | Risposta

                          vecchio frac
                          Senior Moderator
                            248 pts

                            Dal tuo screenshot è come se la variabile di ambiente "x" non fosse settata 

                            #13440 Score: 0 | Risposta

                            vecchio frac
                            Senior Moderator
                              248 pts

                              Per connettermi mi connetto ma sembra che "x" non sia valorizzata correttamente. A te funziona regolarmente  lanciando il file bat manualmente?

                              #13441 Score: 0 | Risposta

                              dariotoby
                              Partecipante

                                vecchio frac ha scritto:

                                Per connettermi mi connetto ma sembra che "x" non sia valorizzata correttamente. A te funziona regolarmente  lanciando il file bat manualmente?

                                si, come ti ho detto se lo faccio manuale tutto ok, funziona

                                Ma cmq da macro si connette perchè se accedo da server vedo che ultimo accesso è avvenuto ma appena vedo il file csv noto che nessuna modifica è fatta.

                                Ora devo inserire dei dati e voglio riverificare.

                                #13444 Score: 0 | Risposta

                                vecchio frac
                                Senior Moderator
                                  248 pts

                                  Ok, forse ci sono!

                                  Sembra strano ma 

                                  "Set x=" & Chr(34) ...

                                  è per il DOS diverso da 

                                  "Set x = " & Chr(34)

                                  perchè la variabile di ambiente "x" nel primo caso è semplicemente "x", nel secondo diventa "x " con lo spazio e quindi poi il comando ftp successivo non lo riconosce (%x% --> dovrebbe diventare %x %).

                                  Riporto tutto quanto, è meglio:

                                  Option Explicit
                                  
                                  Sub CreaBAT(ByVal m As String)
                                  Dim f As Variant, sBat As Variant, s As String
                                  
                                      f = ThisWorkbook.Path & "\test.bat"
                                      Open f For Binary As #1
                                      
                                      sBat = Split( _
                                          "@echo off," & _
                                          ":: CSV file path + filename," & _
                                          "Set x=" & Chr(34) & "%userprofile%\OneDrive\karaoke\Tabella News " & m & ".csv" & Chr(34) & "," & _
                                          ":: Echo the FTP commands to a text file," & _
                                          "echo open ftp.love4music.altervista.org>ftpcmdtemp.txt," & _
                                          "echo love4music>>ftpcmdtemp.txt," & _
                                          "echo mia password>>ftpcmdtemp.txt," & _
                                          "echo binary>>ftpcmdtemp.txt," & _
                                          "echo cd Tabelle_news >>ftpcmdtemp.txt," & _
                                          "echo put %x%>>ftpcmdtemp.txt," & _
                                          "echo quit>>ftpcmdtemp.txt," & _
                                          ":: FTP Execution Commands," & _
                                          "ftp -s:ftpcmdtemp.txt %x%", ",")
                                          
                                      s = Join(sBat, vbNewLine)
                                      Put #1, , s
                                      Close #1
                                  
                                  End Sub
                                  
                                  
                                  
                                  Sub SalvaCSV()
                                  Dim percorso As String
                                  Dim nome As String
                                  Dim mese As String
                                  Dim wb As Workbook
                                  
                                      percorso = ThisWorkbook.Path & "\"
                                      nome = "Tabella News "
                                      
                                      mese = InputBox("Scrivi il nome del mese:")
                                      
                                      Set wb = ThisWorkbook
                                      
                                      Application.DisplayAlerts = False
                                  
                                      wb.Sheets("Tabella News").Copy
                                      ActiveWorkbook.SaveAs Filename:=percorso & nome & mese, FileFormat:=xlCSV, CreateBackup:=False
                                      ActiveWorkbook.Close False
                                      
                                      Application.DisplayAlerts = True
                                  
                                      CreaBAT mese
                                      CreateObject("WScript.Shell").Run Chr(34) & ThisWorkbook.Path & "\test.bat" & Chr(34)
                                      
                                  End Sub

                                  Provalo per cortesia e fammi sapere.

                                  Sul resto della richiesta, fattibile, devo applicarmi 🙂

                                   

                                  #13445 Score: 0 | Risposta

                                  vecchio frac
                                  Senior Moderator
                                    248 pts

                                    Mi sono applicato 😀

                                    Option Explicit
                                    
                                    Sub per_spedizionieri()
                                    Dim s As String
                                    Dim c As Range
                                    Dim r As Long
                                    
                                        r = 2
                                        With Sheets("Tabella News")
                                        
                                            s = "Giorno " & Format(.Range("F2"), "dd mmmm yyyy")
                                            Sheets("Per gli spedizionieri").Range("A1").CurrentRegion.ClearContents
                                            Sheets("Per gli spedizionieri").Range("A1") = s
                                            
                                            For Each c In .Range("B:B")
                                                If Trim(c) = "" Then Exit For
                                                
                                                If c.Row > 1 Then
                                                    With Sheets("Per gli spedizionieri")
                                                        s = c & " - " & c.Offset(, 5) & " - " & c.Offset(, 2)
                                                        .Cells(r, "A") = s
                                                        r = r + 1
                                                        .Cells(r, "A") = c.Offset(, 6)
                                                        r = r + 1
                                                        .Cells(r, "A") = c.Offset(, 7)
                                                        r = r + 1
                                                    End With
                                                        
                                                End If
                                            Next
                                        
                                        End With
                                        MsgBox "Finito", , "Per gli spedizionieri"
                                    End Sub
                                    
                                    #13446 Score: 0 | Risposta

                                    dariotoby
                                    Partecipante

                                      Provato la stessa cosa si connette ma non modifica il file nel server

                                      #13447 Score: 0 | Risposta

                                      vion
                                      Partecipante
                                        3 pts

                                        scusate, ma la macro salva il csv in ThisWorkbook.Path mentre il BAT considera il file csv che sta in OneDrive ? 

                                        #13449 Score: 0 | Risposta

                                        dariotoby
                                        Partecipante

                                          sei un grande

                                          un piccolo appunto su l'ultima macro che mi hai postato se possibile naturalmente, perchè funziona giusta.

                                          come noti ho colorato il testo di blu e di rosso nelle colonne rispettivamente G ed H del foglio sistemazione se fosse possibile riportare i colori per avere una differenzizione dei tipi di link e poi siccome ad inizio serie è un giorno ed inserisco ogni volta che inserisco i brani o che finisco quel giorno la data magari dire alla macro di iniziare a scrivere al primo rigo libero della colonna A del foglio Per gli spedizionieri.

                                           

                                          #13453 Score: 0 | Risposta

                                          vecchio frac
                                          Senior Moderator
                                            248 pts

                                            vion ha scritto:

                                            mentre il BAT considera il file csv che sta in OneDrive ? 

                                            #13463 Score: 0 | Risposta

                                            dariotoby
                                            Partecipante

                                              vion ha scritto:

                                              scusate, ma la macro salva il csv in ThisWorkbook.Path mentre il BAT considera il file csv che sta in OneDrive ? 

                                              In effetti si ho provato a mettere in file excel in documenti e mi crea li il file .CSV. Ma cmq mi fa lo stesso problema se il file excel si trova in One drive, creando il file CSV in One drive questa volta. 

                                              #13474 Score: 0 | Risposta

                                              vion
                                              Partecipante
                                                3 pts

                                                Sostituisci la sub CreaBAT con questo qui sotto, il percorso ora considera  ThisWorkbook e mancava una virgola nell'ultima riga dopo %x%.  Ho fatto un test e funziona.

                                                p.s. Al posto di TUAPASSWORD metti la password del tuo ftp

                                                Sub CreaBAT(ByVal m As String)
                                                Dim f As Variant, sBat As Variant, s As String
                                                
                                                    f = ThisWorkbook.Path & "\test.bat"
                                                    Open f For Binary As #1
                                                    
                                                    sBat = Split( _
                                                        "@echo off," & _
                                                        ":: CSV file path + filename," & _
                                                        "Set x=" & Chr(34) & ThisWorkbook.Path & "\Tabella News " & m & ".csv" & Chr(34) & "," & _
                                                        ":: Echo the FTP commands to a text file," & _
                                                        "echo open ftp.love4music.altervista.org>ftpcmdtemp.txt," & _
                                                        "echo love4music>>ftpcmdtemp.txt," & _
                                                        "echo TUAPASSWORD>>ftpcmdtemp.txt," & _
                                                        "echo binary>>ftpcmdtemp.txt," & _
                                                        "echo cd Tabelle_news >>ftpcmdtemp.txt," & _
                                                        "echo put %x%>>ftpcmdtemp.txt," & _
                                                        "echo quit>>ftpcmdtemp.txt," & _
                                                        ":: FTP Execution Commands," & _
                                                        "ftp -s:ftpcmdtemp.txt %x%,", ",")
                                                        
                                                    s = Join(sBat, vbNewLine)
                                                    Put #1, , s
                                                    Close #1
                                                
                                                End Sub
                                                #13476 Score: 0 | Risposta

                                                vecchio frac
                                                Senior Moderator
                                                  248 pts

                                                  Piano piano unendo le forze, se non combino altri strafalcioni, ce la facciamo 🙂

                                                  #13479 Score: 0 | Risposta

                                                  dariotoby
                                                  Partecipante

                                                    Si funziona, non combini nessun strafalcione non siamo perfetti, cu mangia fa muddichi si dice dalle mie parti.

                                                    Ottimo.

                                                    Grande Vecchio frac e grande a Vion

                                                    Siete stati molto disponibili

                                                    Ps Scusate io non voglio essere pesante o esigente e non voglio approfittarmi di voi, ma se posso volevo porvi un queisito. Penso che si possa fare ma penso anche che sia molto complicato, ma non da fare ora.

                                                    Ecco il queisito il file excel con 4 fogli con circa in totali tra i 4 fogli ci sono più da 40000 righe ed ogni riga un artista ed un brano karaoke.

                                                    Siccome sto facendo un sito di appoggio ad un forum nell'attesa di trasferire il forum in questo sito  https://love4music.altervista.org/news-del-mese-di-marzo-2019/

                                                    il file exfcel appunto ad oggi è il database di tutti i brani che da ricerche via internet ho appreso che è più funzionale trasferirlo in un database mySql cioè le tabelle in Phpmyadmin, nell'attesa di sistemare i di trovare uno che mi aiuti ad un modulo di ricerca live delle tabelle in liguaggio php da integrare nel sito in wordpress, perchè purtroppo come avete capito sono molto autodidatta. Sto facendo pian pian le cose.  Andiamo alla domanda tramite macro è possibile trasferire ed fare l'update delle tabelle in phpmyadminy nel database del sito dal file excel? 

                                                    #13484 Score: 0 | Risposta

                                                    dariotoby
                                                    Partecipante

                                                      vecchio frac ha scritto:

                                                      Mi sono applicato 😀

                                                      Scusa se volessi fare in modo che nel vadano i dati nel foglio Per gli spedizionieri ma nella colonna B per lasciare la colonna A per inserire i Giorni di riferimento della rispettiva canzone pubblicata mi basta modificare questi codici? Modifico Range A1 in B1 e Range B:B in C:C e Cells r, "A" in Cells r, "B" va bene?

                                                      s = "Giorno " & Format(.Range("F2"), "dd mmmm yyyy")
                                                              Sheets("Per gli spedizionieri").Range("B1").CurrentRegion.ClearContents
                                                              Sheets("Per gli spedizionieri").Range("B1") = s
                                                              
                                                              For Each c In .Range("C:C")
                                                                  If Trim(c) = "" Then Exit For
                                                                  
                                                                  If c.Row > 1 Then
                                                                      With Sheets("Per gli spedizionieri")
                                                                          s = c & " - " & c.Offset(, 5) & " - " & c.Offset(, 2)
                                                                          .Cells(r, "B") = s
                                                                          r = r + 1
                                                                          .Cells(r, "B") = c.Offset(, 6)
                                                                          r = r + 1
                                                                          .Cells(r, "B") = c.Offset(, 7)
                                                                          r = r + 1
                                                                      End With
                                                    Login Registrati
                                                    Stai vedendo 25 articoli - dal 26 a 50 (di 78 totali)
                                                    Rispondi a: sincronizzare tra file excel nel pc e sito
                                                    Gli allegati sono permessi solo ad utenti REGISTRATI
                                                    Le tue informazioni: