Una famiglia di software per fogli di calcolo Microsoft con strumenti per l'analisi, la creazione di grafici e la comunicazione dei dati.
Di una cartella devo salvare una copia solo del Foglio "Anni" con nome "NomeFile Anno " e l'anno della cella H2 (che è una data "gg/mm/aaaa"), possibilmente nella stessa directory (percorso) in cui si trova il file di partenza.
Ho adattato la seguente macro con cui vado a salvare un nuovo file:
Private Sub CommandButton2_Click()
Dim X As String
Dim P As String
Dim N As String
Dim sFile As String
X = Application.ActiveWorkbook.Path
P = X & "\NomeFile Anno "
If Sheets("Anni").Range("H2") = "" Then
MsgBox "Nessun Anno selezionato"
Else
N = Year(Sheets("Anni").Range("H2"))
sFile = P & N & ".xls"
If Dir(sFile) <> "" Then
If MsgBox("file " & sFile & " esiste già" & _
vbCrLf & "sovrascrivo?", vbCritical + vbYesNo, _
"ATTENZIONE") = vbNo Then GoTo Fine
MsgBox "Il File NomeFile Anno " & N & " salvato"
End If
Sheets("Anni").Select
Sheets("Anni").Copy
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:=sFile
ActiveWorkbook.Close Filename:=sFile
Application.DisplayAlerts = True
End If
Fine:
End Sub
Ho notato che se utilizzo la versione 2007 non funziona bene, cioè salva la copia del foglio "Anni" con nome indicato, ma poi se apro il file salvato mi dice con versione 2007 mi da avviso "Il formato del file che si sta tentando di aprire, "Nomefile.xls", è diverso da quello specificato dall'estensione del file. Prima di aprire verifcare che non sia danneggiato e che provenga da una fonte attendibile. Aprire il file? SI NO ?" digitando SI mi apre regolarmente; se invece apro con versione 2002 ho il seguente avviso "Impossibile riconoscere il formato del file. se il file appartiene a un altro programma incompatibile ... ecc." e se premo "OK" sballa tutto il file che diventa illegibile.
Utilizzando direttamente la versione 2002 se salvo copia foglio "Anni", poi apro regolarmente sia con 2002 che con 2007. Potete indicarmi dove sbaglio? Grazie e una buona Domenica at utti.
Ciao
Antonio
Prova così:
Public Sub m()
Dim sh As Worksheet
Dim sPath As String
Dim sNomeFile
Dim lRisposta As Long
Set sh = ThisWorkbook.Worksheets("Anni")
sPath = ThisWorkbook.Path & "\NomeFile Anno "
Application.ScreenUpdating = False
With sh
If .Range("H2").Value = "" Then
MsgBox "Nessun anno selezionato."
Exit Sub
End If
sNomeFile = sPath & Year(.Range("H2").Value) & ".xls"
If Dir(sNomeFile) <> "" Then
lRisposta = _
MsgBox(Prompt:="Il file: " & sNomeFile & " esiste già. Sovrascriverlo?.", _
Title:="Attenzione", _
Buttons:=vbYesNo + vbQuestion)
If lRisposta = vbNo Then Exit Sub
End If
Application.CutCopyMode = False
Sheets(.Name).Copy
Workbooks(ActiveWorkbook.Name).SaveAs Filename:=sNomeFile, FileFormat:=xlExcel8
ActiveWorkbook.Close
End With
Application.ScreenUpdating = True
Set sh = Nothing
End Sub
Nella guida del vb di excel vedi anche: Costante enumerata XlFileFormat.
Fai sapere se risolvi, grazie.
--
La soluzione, il codice ed i files sono forniti *così come sono* e l’autore declina ogni responsabilità per eventuali problemi causati dalla soluzione proposta se usata impropriamente. Create e utilizzate una copia del file per le vostre prove, *prima* di utilizzare la soluzione in files importanti.
--
Mauro Gamberini - Microsoft© MVP(Excel)