Pippo_012 ha scritto:
Scusa io non so programmare, e quello che ho fatto l'ho visto in rete...
Questo ci mette in difficoltà perché è difficile aiutare senza sconfinare nel codice "pappa pronta".
Oltre allo strano uso degli If, usi troppe volte la stessa concatenazione di costanti e variabili. Tanto vale assegnarla ad una variabile la prima volta, si guadagna in velocità (anche se probabilmente è impercettibile su poche esecuzioni) ed è molto più facile fare debug.
Questa parte di codice, ad esempio, non fa quello che vorresti tu
If Len(Dir("strPath\" & "P_" ...
Se con questa riga volevi verificare la presenza del file nel percorso contenuto nella variabile strPath\ sei in errore perché così facendo stai in realtà cercando qualcosa che si chiama
strPath\P_(eccetera) e che con tutta probabilità non esiste (non credo che tu abbia una cartella che si chiama strPath nel filesystem)
Probabilmente dovevi scrivere
If Len(Dir(strPath & "\P_" ...
(da migliorare, con l'uso di variabili stringa apposite, come dicevo sopra)
Comunque, ho dato una sfoltita al codice, con i commenti alle modifiche fatte e ai punti da approfondire man mano che chiarisci gli aspetti che precedono. Ho tolto anche la parte che per la soluzione di questo thread, non rileva (ma che deve essere lasciato nella procedura completa)
Dim App As Object
Dim Doc As Object
Dim NewPath As String
Dim NewFile As String
Dim strPath As String
Dim anno As Integer
'dichiarazione di variabili da aggiungere
Dim strVerifica as String
Dim strNomeFile As String
anno = Year(Date)
strPath = "\\Server\z\01_GESTIONE AZIENDA\PREVENTIVI\" & CStr(anno)
strPath = strPath & "\P_" & [numero_offerta] & " " & [ragione_sociale] & "-" & [riferimento]
'siamo sicuri che questo path esiste? Se non c'è, al momento del salvataggio darà errore perché non trova dove salvare il file
Debug.Print strPath
strNomeFile = "P_" & Left([numero_offerta], 4) & "-" & Right([numero_offerta], 4) & ".docx"
Debug.Print strNomeFile
'Per vedere cosa valuta quella If di cui non abbiamo capito ancora l'utilità
strVerifica = strPath & "\" & strNomeFile
Debug.Print strVerifica
Set App = CreateObject("Word.Application") 'questa vale in entrambi i casi
If Len(Dir(strVerifica) > 0 Then
' esiste un file con quel nome
' codice di apertura del file esistente
...
' rimane aperto "per sempre"? Nel codice non c'era niente in merito.
Else
'il file non esiste
'codice per la creazione del file
App.Visible = False
Set Doc = App.Documents.Open("\\Server\z\Gestionale Azienda\modulo_offerta.docx")
..........
NewPath = strPath & "\"
NewFile = "P_" & Left([numero_offerta], 4) & "-" & Right([numero_offerta], 4)
Doc.SaveAs FileName:=NewPath & NewFile
Dir (NewPath & NewFile) 'questa riga non serve se non è collegata ad alcuna valutazione del risultato della Dir()
MsgBox "Offerta salvata come: " & NewPath & NewFile
End If
'vedere cosa deve essere chiuso e distrutto dei vari oggetti, dentro la If e fuori.
End Sub