| | Post: 83 | Registrato il: 10/05/2005
| Utente Junior | EXCEL 2016 | | OFFLINE | |
|
29/06/2018 08:07 | |
RISOLTO - MACRO COPIA IN ALTRO FILE Buongiorno a tutti,
ho un file xslm che riporta le giacenze di magazzino e pesca i dati da un sql. Si deve aggiornare ogni tot minuti e ad ogni aggiornamento deve salvare i dati in qu altro file xls e rinominato con il nome di una cella definita. Ho la necessità di sovrascrivere sempre il file destinazione perchè quel nome file verrà utilizzato per un'applicazione web.
Ho pasticciato un po' con le macro per farlo
1)aggiornare,
2)copiare solo i valori
3)copiare la formattazione (che magari poteva essere fatta nell'istruzione precedente ma non ci sono riuscito)
4)dare la destinazione del secondo file
5)assegnare il nome file alla cella
Ora nasce il problema: quando salvo il file lo deve sovrascrivere senza chiedermi altro e deve lasciare il file originale aperto altrimenti non si aggiorna (o c'è una macro che aggiorna fa tutto questo anche a file originale chiuso?)
Allego un file tipo e spero vivamente di ricevere assistenza [Modificato da Bierrepi 29/06/2018 16:11] ----------
Excel 2010 |
|
| | Post: 83 | Registrato il: 10/05/2005
| Utente Junior | EXCEL 2016 | | OFFLINE | |
|
29/06/2018 08:27 | |
Sper di non essere troppo pedante ma mi sono accorto di non aver detto cosa non funziona.
Una volta lanciata la macro Aggiorna, in maniera ciclica aggiorna e salva (gli ho impostato un nr. di secondi basso per vedere cosa faceva). Attualmente fa l'aggiornamento, apre il secondo file e mi chiede se lo voglio sovrascrivere (cosa che invece deve fare da solo)e poi chiede di salvare le modifiche al primo file (in questo caso invece dovrebbe lasciare il file così com'è dato che deve rimanere aperto e si aggiorna ogni tot.)
Grazie a tutti ----------
Excel 2010 |
| | Post: 3.570 | Registrato il: 28/06/2011
| Città: AGORDO | Età: 70 | Utente Master | 2013 | | OFFLINE | |
|
29/06/2018 11:54 | |
Personalmente non userei >>>Cells.Copy, userei EX un Range("A1:Z65000").Copy (per gli .xls, le righe sono 65536 e 256 colonne). Sempre abbia capito bene. Provalo dopo toglierai le spunte prima ed ultima riga vb Sub Copia_Dati()
'ActiveWorkbook.RefreshAll
Range("A1:Z65000").Copy
Dim Cartella As String, NomeFile As String, Risposta As Integer
Cartella = "\\CPINTRANET\tabelle-condivise\"
'Cartella = "C:\Users\Casa\Desktop\Prove_Excel\" 'riga da eliminare
NomeFile = Range("D1").Value & ".xls"
Application.ScreenUpdating = False
If Len(Dir$(Cartella & NomeFile)) Then
Workbooks.Open Filename:=Cartella & NomeFile
ActiveSheet.Range("A1").PasteSpecial
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=Cartella & NomeFile, FileFormat:=xlExcel8, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
Application.DisplayAlerts = True
ActiveWorkbook.Close
Else
Risposta = MsgBox(prompt:="Il file non esiste? Creo uno nuovo? Si , No = fine procedura?", Buttons:=vbYesNo)
If Risposta = vbYes Then
Workbooks.Add
ActiveSheet.Range("A1").PasteSpecial
ActiveSheet.Cells.EntireColumn.AutoFit
ActiveWorkbook.SaveAs Filename:=Cartella & NomeFile, FileFormat:=xlExcel8, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
ActiveWorkbook.Close
End If
End If
Application.ScreenUpdating = True
'Call schedula
End Sub Excel 2013 |
| | Post: 84 | Registrato il: 10/05/2005
| Utente Junior | EXCEL 2016 | | OFFLINE | |
|
29/06/2018 13:08 | |
grazie Raffaele,
lanciata la macro Schedula, dopo nove secondi fa l'aggiornamento , chiede se vuoi creare o no il file e poi fine dei giochi. Ogni tot secondi dovrebbe fare l'aggiornamento che si interrompe solo se faccio partire la marco Ferma.
Mi sono perso il loop. ----------
Excel 2010 |
| | Post: 3.573 | Registrato il: 28/06/2011
| Città: AGORDO | Età: 70 | Utente Master | 2013 | | OFFLINE | |
|
29/06/2018 13:43 | |
Riproviamo in questo modo, se esiste già il files l'ho sovrascrive, se non esiste lo crea.
Se non esiste un NomeFile nella cella D1 non fa nulla
NB ActiveWorkbook.RefreshAll, credo serva ad aggiornare tabelle pivot, dato che non sono presenti nell'allegato, a me impalla il PC.
Attivato il timer vb Public Bin As Boolean
Sub Copia_Dati()
If Bin = True Then
'ActiveWorkbook.RefreshAll
Range("A1:Z65000").Copy
Dim Cartella As String, NomeFile As String, Risposta As Integer
Cartella = "\\CPINTRANET\tabelle-condivise\"
NomeFile = Range("D1").Value & ".xls"
If NomeFile <> "" Then
Application.ScreenUpdating = False
If Len(Dir$(Cartella & NomeFile)) Then
Workbooks.Open Filename:=Cartella & NomeFile
ActiveSheet.Range("A1").PasteSpecial
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=Cartella & NomeFile, FileFormat:=xlExcel8, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
Application.DisplayAlerts = True
ActiveWorkbook.Close
Else
Workbooks.Add
ActiveSheet.Range("A1").PasteSpecial
ActiveSheet.Cells.EntireColumn.AutoFit
ActiveWorkbook.SaveAs Filename:=Cartella & NomeFile, FileFormat:=xlExcel8, _
Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
CreateBackup:=False
ActiveWorkbook.Close
End If
Application.ScreenUpdating = True
End If
Call schedula
End If
End Sub
Sub schedula()
Application.OnTime Now + TimeValue("00:00:10"), "Copia_Dati"
Bin = True
End Sub
Sub ferma()
Bin = False
End Sub
[Modificato da raffaele1953 29/06/2018 15:47] Excel 2013 |
| | Post: 85 | Registrato il: 10/05/2005
| Utente Junior | EXCEL 2016 | | OFFLINE | |
|
29/06/2018 16:44 | |
Grazie Raffaele,
sei stato risolutivo, senza questo aiuto non ce l'avrei fatta.
Ora me la studio per bene.
Grazie ancora.
PS ho provato a mettere risolto nella discussione ma mi ha cambiato solo il nome del primo post; sai come poterlo fare?
Saluti
Renato ----------
Excel 2010 |
|
|