Salva con nome file esistente



  • Salva con nome file esistente
    di marcofonini data: 23/01/2013 12:40:44

    Salve,
    ho questa macro che salva il file con nome, ma se il nome del file già esiste e si da il comando no (non sovrascrivere il file) si apre la finestra di debug. E' possibile evitarlo?
     
    Sub salva2()
    Dim percorso, nome, nomecompleto As String
    percorso = ActiveWorkbook.Path & ""
    nome = "File " & _
    ActiveSheet.Range("A1").Value & _
    " del " & _
    Replace(ActiveSheet.Range("B1").Value, "/", "-")
    nomecompleto = percorso & nome
    ActiveWorkbook.SaveAs Filename:=nomecompleto
    End Sub


  • Salva con nome file esistente
    di marcofonini data: 23/01/2013 12:40:52

    Salve,
    ho questa macro che salva il file con nome, ma se il nome del file già esiste e si da il comando no (non sovrascrivere il file) si apre la finestra di debug. E' possibile evitarlo?
     
    Sub salva2()
    Dim percorso, nome, nomecompleto As String
    percorso = ActiveWorkbook.Path & ""
    nome = "File " & _
    ActiveSheet.Range("A1").Value & _
    " del " & _
    Replace(ActiveSheet.Range("B1").Value, "/", "-")
    nomecompleto = percorso & nome
    ActiveWorkbook.SaveAs Filename:=nomecompleto
    End Sub



  • di HarryBosch data: 23/01/2013 13:13:55

    Si, esce l'errore perché il salvataggio non viene eseguito e quel "SaveAs" non si compie correttamente.
    Puoi inserire la correzione dell'errore inserendo questa istruzione subito prima del SaveAS, vedi sotto.

    Una nota per quanto riguarda le variabili: in vba, diversamente dal vb, per ogni variabile devi sempre essere indicato il tipo, altrimenti assumono il tipo Variant.

    Se vuoi sovrascrivere sempre il file, quindi nel caso già esistesse, puoi evitare la conferma che ti esce, inserendo queste due istruzioni, a inizio e a fine codice:
    Application.DisplayAlerts = False
    '...istruzioni
    Application.DisplayAlerts = True
     
    Sub salva2()
        Dim percorso As String, nome As String, nomecompleto As String
        
        percorso = ActiveWorkbook.Path & ""
        nome = "File " & ActiveSheet.Range("A1").Value & " del " & _
               Replace(ActiveSheet.Range("B1").Value, "/", "-")
        nomecompleto = percorso & nome
        
        On Error Resume Next
        ActiveWorkbook.SaveAs Filename:=nomecompleto
        
    End Sub
    



  • di Vecchio Frac data: 23/01/2013 13:18:58

    cit. " Una nota per quanto riguarda le variabili: in vba, diversamente dal vb, per ogni variabile devi sempre essere indicato il tipo, altrimenti assumono il tipo Variant. "
    ---> Il punto è che l'errore comune che si fa quando si affronta VBA è pensare che
    Dim percorso, nome, nomecompleto As String
    specifichi il tipo "String" per ognuna delle variabili indicate, ma ciò non è vero, solo l'ultima è espressamente tipizzata mentre le prime due (non essendo specificate) diventano Variant, con grande spreco di memoria.
    Ecco perchè come dice HarryBosch bisogna essere espliciti per ogni variabile in gioco:
    Dim percorso As String, nome As String, nomecompleto As String





  • di marcofonini data: 23/01/2013 16:15:40

    Grazie mille HarryBosch, funziona perfettamente. Ti sono grato anche per la spiegazione sulle variabili, mi sarà utile in futuro.
    Grazie anche a te vecchio frack, sei un punto di riferimento.
    A presto



  • di marcofonini data: 23/01/2013 16:16:17