› Sviluppare funzionalita su Microsoft Office con VBA › sincronizzare tra file excel nel pc e sito
-
AutoreArticoli
-
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.
no in questo modo non funziona e neanche in questo
set x="ThisWorkbook.Path\Tabella News Febbraio.csv"
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.
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.
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
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
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.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
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.
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
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.
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.
Dal tuo screenshot è come se la variabile di ambiente "x" non fosse settata
Per connettermi mi connetto ma sembra che "x" non sia valorizzata correttamente. A te funziona regolarmente lanciando il file bat manualmente?
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.
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 🙂
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
Provato la stessa cosa si connette ma non modifica il file nel server
scusate, ma la macro salva il csv in ThisWorkbook.Path mentre il BAT considera il file csv che sta in OneDrive ?
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.
mentre il BAT considera il file csv che sta in OneDrive ?
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.
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
Piano piano unendo le forze, se non combino altri strafalcioni, ce la facciamo 🙂
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?
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
-
AutoreArticoli