salvare in una cartella diversa



  • salvare in una cartella diversa
    di marnevi (utente non iscritto) data: 16/08/2017 15:55:07

    Vorrei salvare una copia del file excel attivo in una cartella che si trova ad un livello di directory inferiore rispetto al path in cui si trova il file excel attivo.
    Vorrei che si comporti in modo analogo a come fa il seguente codice, che estrae dati da un file che si trova ad un livello di directory inferiore rispetto al file attivo
     
    Option Explicit
    Private Sub Workbook_Open()
    
    Dim sPath As String
    Dim Nome As String
    
    sPath = ActiveWorkbook.Path
    p = InStrRev(sPath, "")
    oPath = Left(sPath, p)
    
    With ActiveWorkbook.Sheets(1)
        Nome = .Range("A1")
        .Range("A2").Formula = "='" & oPath & "[" & Nome & "]Foglio1'!$A$2"
    End With
    
    End Sub



  • di Vecchio Frac data: 16/08/2017 16:25:00

    Cerca lo slash precedente all'ultimo e trovi il percorso superiore (si chiama così, mi dispiace, non "inferiore" ^_^)
    Oppure splitti in corrispondenza degli slash e consideri il penultimo indice.
    Non è da molto che ho scritto qualcosa di simile per qualcun altro.





  • di marnevi (utente non iscritto) data: 16/08/2017 21:59:23

    puoi farmi un esempio?



  • di Vecchio Frac data: 17/08/2017 09:07:02

    Ho trovato l'esempio che facevo una decina di giorni fa.
     
    Option Explicit
    
    'prima soluzione
    Sub estrazione1()
    Dim sPath As String
    Dim p As Long
    Dim opath As String
    
        sPath = ActiveWorkbook.Path
        p = InStrRev(sPath, "")
        p = InStrRev(sPath, "", p - 1)
        opath = Left(sPath, p)
    
    End Sub
    
    
    'seconda soluzione
    Sub estrazione2()
    Dim sPath As String
    Dim oPath As String
    Dim v As Variant
    
        sPath = ActiveWorkbook.Path
        v = Split(sPath, "")
        ReDim Preserve v(UBound(v) - 2)
        oPath = Join(v, "")
    
    End Sub






  • di scossa data: 17/08/2017 11:22:49

    Ciao,

    propongo la udf ricorsiva sottoriportata, utilizzabile lato celle come da esempio:

    =SubPath(CELLA("nomefile";A1);1)

    N.B.: il parametro nLev, nell'uso lato celle, deve partire da 1 se si vuole escludere il nome del file.

    oppure lato codice come da esempio (Sub estrazione4) sottoriportato.


    scossa's web site
    Se tu hai una mela, ed io ho una mela, e ce le scambiamo, allora tu ed io abbiamo sempre una mela per uno. Ma se tu hai un'idea, ed io ho un'idea, e ce le scambiamo, allora abbiamo entrambi due idee. (George Bernard Shaw)

     
    Function SubPath(sString, Optional ByRef nLev As Long = 0) As String
      'by scossa
      'funzione ricorsiva che restituisce il path troncato al livello nLev
      'se nLev omesso o minore di 0 restituisce il path completo
      'se nLev maggiore del numero dei folder restituisce la lettera del driver
      'usata lato cella mettere nLev = 1 per la cartella del foglio; es.:
      '=SubPath(CELLA("nomefile";A1);1)
      
      Dim nAt As Long
      
      nLev = nLev - 1
      nAt = InStrRev(sString, "") - 1
      If nLev >= 0 And nAt > 0 Then
        sString = SubPath(Left(sString, nAt), nLev)
      End If
      
      SubPath = sString
    End Function
    
    
    'esempio:
    Sub estrazione4()
    
      Debug.Print SubPath(ActiveWorkbook.Path, 1) '& ""
    
    End Sub
    



  • di Vecchio Frac data: 17/08/2017 15:38:18

    +1





  • di marnevi (utente non iscritto) data: 18/08/2017 12:47:00

    Funziona... grazie scossa. grazie vecchio frac.
    sempre preziosi