import xls vba



  • import xls vba
    di almanegrita (utente non iscritto) data: 18/03/2017 18:03:35

    ciao a tutti ho questo codice che vorrei riadattare
    per un xls normale....
    per il mio csv funziona bene, mi impirta tutti i dati, ora lo vorrei implementare anche
    per farmi importare un fiel excel.
    è possibile riadattarlo ?
    Grazie mille a chi mi darà una mano.

     
    Sub importa_csv_gls()
    Dim line As String
    Dim arrayOfElements
    Dim linenumber As Integer
    Dim elementnumber As Integer
    Dim element As Variant
    
    linenumber = 0
    elementnumber = 0
    filepath = ActiveWorkbook.Path & "	rack_gls.xls"
    Open filepath For Input As #1 ' Open file for input
        Do While Not EOF(1) ' Loop until end of file
            linenumber = linenumber + 1
            Line Input #1, line
            arrayOfElements = Split(line, " ")
    
            elementnumber = 0
            For Each element In arrayOfElements
                elementnumber = elementnumber + 1
                Cells(linenumber, elementnumber).Value = element
            Next
        Loop
    Close #1 ' Close file.
    End Sub



  • di patel data: 18/03/2017 19:42:58

    Capisco il senso di importare un file di testo, ma non quello di importare un xls, basta aprire il file e copiarlo




  • import xls vba
    di almanegrita (utente non iscritto) data: 19/03/2017 06:18:59

    la domanda è stata fatta perche se il file è 1 e va bene...
    ma quando diventano 10 e devi copiare da cima a fondo ogni file e incollarli, capisci anche tu che il problema di tempo inizia a pesare
    e con una macro ho un risparmio di tempo abbastanza grande.
    Grazie



  • di patel data: 19/03/2017 07:38:56

    tu hai detto "per farmi importare un file excel. ", comunque non è possibile riadattare quel codice, ne occorre uno nuovo, quindi spiega bene cosa vuoi ottenere




  • import xls vba
    di almanegrita (utente non iscritto) data: 19/03/2017 07:48:27

    allora, ho risolto parzialmente, ho preso questo codice e l'ho riadattato alle mie esigenze.
    praticamente io normalmente devo aprire 4, spesso anche da 5 file excel di diversi corrieri, (con molti valori all'interno), prendere i dati ed incollarli nei rispettivi fogli del mio foglio di lavoro generale.
    Poi una volta fatto cio, vado a manipolare i dati e tirare fuori solo determinate cose che mi interessano da ognuno di questi 5 file.
    poi questi dati estrapolati li devo incolonnare e devo generare un export.
    Ecco perche chiedevo una macro, cosi mi evitavo di aprire ogni santa volta tutti i file, e stare a fare ctrl+c ctrl+v......anche eprche spesso uno sbaglia a copiare o salta qualcosa onon seleziona bene...
    onde evitare errori prendi una macro e tutto fila via liscio.
    Ora, venendo al dunque,la routine funziona, solo che se 1 dei miei fogli ha 40 righe, le altre 10 righe caricate danno 0 0 0 0 nelle celle.......
    Probabilmente è questo che le fa generare (1 To 50 ' numero righe ).
    come posso ovviare e lasciarle in bianco se non c'è valore nel file da cui prendo il dato ?
    Grazie mille.


     
    Private Function PrendiDati(percorso, nomefile, foglio, rif)
    
    Dim arg As String
    If Right(percorso, 1) <> "" Then percorso = percorso & "" 'controlliamo anche che nella stringa "percorso" sia stata inserita la barra 
    If Dir(percorso & nomefile) = "" Then
    PrendiDati = "File Non Trovato"
    Exit Function
    End If
    
    ' usiamo la variabile "arg" assegnando la concatenazione dei valori reperiti con gli argomenti dalla macro "RilevaDati" - questa stringa non occorre modificarla
    arg = "'" & percorso & "[" & nomefile & "]" & foglio & "'!" & Range(rif).Range("A1").Address(, , xlR1C1)
    
    ' Eseguiamo una XLM macro il cui risultato è assegnato alla funzione stessa
    PrendiDati = ExecuteExcel4Macro(arg)
    End Function
    
    
    
    Sub Importa_track_gls()
    Application.ScreenUpdating = False
    Sheets("track_gls").Select
    Cells.ClearContents
    percorso = "C:UsersigorDesktopSPEDIZIONI"
    file = "track_gls.xls"
    foglio = "spedizioni"
    For r = 1 To 50 ' numero righe
    For c = 1 To 25 ' numero colonne , in questo caso dalla A alle E
    cella = Cells(r, c).Address
    Sheets("TRACK_GLS").Select
    Cells(r, c) = PrendiDati(percorso, file, foglio, cella) ' richiamo della funzione
    Application.ScreenUpdating = False
    'Progressione.Hide
    Next c
    Next r
    End Sub



  • di patel data: 19/03/2017 09:04:32

    prova questa che ti permette di selezionare i file da importare
     
    Sub BigMerge() ' copia uno sotto l'altro tutti i fogli di tutti i file
    Set destWB = ActiveWorkbook
    Dim DestCell As Range
    FileNames = Application.GetOpenFilename( _
            filefilter:="Excel Files (*.xls*),*.xls*", _
            Title:="Select the workbooks to merge.", MultiSelect:=True)
    If IsArray(FileNames) = False Then
        If FileNames = False Then
            Exit Sub
        End If
    End If
    dr = 1
    For N = LBound(FileNames) To UBound(FileNames)
        Set WB = Workbooks.Open(fileName:=FileNames(N), ReadOnly:=True)
        For Each ws In WB.Worksheets
            With ws
                If .UsedRange.Cells.Count > 1 Then
                   LR = destWB.Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row
                   .UsedRange.Copy destWB.Worksheets(1).Cells(dr, 1)
                   dr = ActiveSheet.UsedRange.Rows.Count + 2
                End If
            End With
        Next ws
        WB.Close savechanges:=False
    Next N
    End Sub
    





  • import xls vba
    di almanegrita (utente non iscritto) data: 19/03/2017 09:17:06

    risolto, la riadatto con qualche modifica...
    Grazie ancora, apro un altro 3d per risolvere un altro problemino.
    Grazie ancora.