Creare nuovo file excel estraendo i dati da altri file excel

Anonimo
2014-12-04T23:55:26+00:00

Ciao,

premetto che non conosco praticamente nulla di VBA.

Nel corso degli anni ho creato innumerevoli file Excel strutturati nel medesimo modo.

Ogni file è composto da diversi fogli, tutti uguali nella struttura tranne i fogli Pippo e Pluto (che sono diversi nella struttura e non ho necessità di prendere in considerazione).

Ogni foglio è strutturato in modo identico all'altro.

Il nome di questi fogli è composto da strighe che (ahimè) contengono anche punti (.) e parentesi e segni +-

Ora vorrei estrarre tutti i dati da questi fogli e riepilogarli in un unico foglio.

Esempio di un file

cartellann.xls

foglio23.5                 voglio prendere il contenuto della cella E8,E9,E10............

foglio2Ø3.5ES44      voglio prendere il contenuto della cella E8,E9,E10...........

foglio23.5+23(3)      voglio prendere il contenuto della cella E8,E9,E10............

pippo                       non voglio considerare

pluto                        non voglio considerare

vorrei creare una nuova cartella suppergiù così.

cartellann.xls             foglio23.5                contenuto cella E8                contenuto cella E9              contenuto cella E10 ................

cartellann.xls            foglio2Ø3.5ES44      contenuto cella E8                contenuto cella E9              contenuto cella E10 ................

cartellann.xls            foglio23.5+23(3)      contenuto cella E8                contenuto cella E9              contenuto cella E10 ................

cartellannnnnn.xls    così via.....

Come posso fare?

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2014-12-16T11:35:30+00:00

Ciao Red Mud,

     Const sAddress = "F2,K2,C4,H4,C6,H6,E8,I7,I8,J8,L8," _

          & "E9,I9,E10,E11,E12,E13,I14,J15,E16,J17,J18," _

    & "B21,E21,H21,J21,O21,B22,E22,H22,J22,O22," _

& "B23,E23,H23,J23,O23,B24,E24,H24,J24,O24," _

& "B25,E25,H25,J25,O25,B26,E26,H26,J26,O26,B28,J28,I30," _

& "L30,L32,D36,F36,I36,D37,F37,I37,D38,F38,I38," _

& "P15,P16,P17,P18"                     '<<==== Modifica

Credo che il tuo problema sia dovuto alla lunghezza della stringa sAddress e il numero di caratteri linebreak (_).

Pertanto, prova invece:

      Const sAddress As String = "F2,K2,C4,H4,C6,H6,J8,L8,I7:I9," _

& "E8:E13,I14,J15,E16,J17:J18,B21:B26,E21:E26," _

& "H21:H26,J21:J26,O21:O26,B28,J28,I30,L30,L32," _

& "D36:D38,F36:F38,I36:I38,P15:P18"                                

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

36 risposte aggiuntive

Ordina per: Più recente
  1. Anonimo
    2014-12-11T11:56:29+00:00

    Ciao Red Mud,

    Potrei replicare il tuo errore di run-time 91 se io avessi sbagliato la battitura del valore della costante sFolder; ad esempio se io dovessi sostituire

        Const sFolder As String = "C:\SCHEDE PREZZO"

    con

           Const sFolder As String = "C:\  SCHEDE PREZZO"

    o con

           Const sFolder As String = "C:\SCHEDE PREZZOa"

    In ogni modo, sostituisci la riga

        On Error GoTo XIT

    con 

        'On Error GoTo XIT                      '\ Nota l'apostrophe iniziale

    e riprova il codice.

    Se il mio suggerimento dovesse essere corretto, è possibile che  questa volta tu possa incontrare un errore di run-time 71 e che la riga

        Set oFolder = FSO.GetFolder(sFolder)

    sia evidenziata.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2014-12-11T07:49:13+00:00

    Ciao Norman.

    Ecco il messaggio d'errore dopo aver fatto girare la diagnostica.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2014-12-10T15:05:12+00:00

    Ciao Red Mud

    Ho eseguito la tua versione.

    Dopo aver estratto correttamente la prima directory mi da il seguente errore:

    [cut]

    Ti ho inviato la cattura schermo della struttura directory per email.

    Al fine di indagare il problema, prova la seguente versione diagnostica del mio codice.

    '=========>>

    Option Explicit

    '--------->>

    Public Sub Diagnostica()

        Dim FSO As Object

        Dim oFile As Object

        Dim oFiles As Object

        Dim oFolder As Object

        Dim oSubFolder As Object

        Dim WB As Workbook

        Dim destSH As Worksheet

        Dim j As Long

        Dim sPrompt As String, iButtons As Long, sTitle As String

        Const sFolder As String = "C:\SCHEDE PREZZO"

        On Error GoTo XIT

        Set WB = ThisWorkbook

        Set destSH = WB.Sheets(1)

        Set FSO = CreateObject("Scripting.FileSystemObject")

        Set oFolder = FSO.GetFolder(sFolder)

        j = 1

        For Each oSubFolder In oFolder.SubFolders

            Set oFiles = oSubFolder.Files

            For Each oFile In oFiles

            j = j + 1

            destSH.Cells(j, "A").Value = oSubFolder.Path

            destSH.Cells(j, "B").Value = oFile.Path

             Application.StatusBar = "Processing il file " & oFile.Path

            Next oFile

        Next oSubFolder

        destSH.UsedRange.EntireColumn.AutoFit

    XIT:

        Application.StatusBar = False

        If Err.Number = 0 Then

            sPrompt = "La procedura è stata completata senza alcun problema"

            iButtons = 64

            sTitle = "Finito"

        Else

            sPrompt = "j = " & j _

            & vbNewLine _

            & "oSubFolder = " & oSubFolder.Path _

            & vbNewLine _

            & "oFile = " & oFile.Path _

            & vbNewLine & vbNewLine _

            & "Errore " _

                    & Err.Number _

                    & " (" _

                    & Err.Description _

                    & ") nella routine: Diagnostica"

            iButtons = 16

            sTitle = "ERRORE"

        End If

        Call MsgBox(sPrompt, iButtons, sTitle)

    End Sub

    '<<=========

    In caso di errore, ti chiederei di riferire il messaggio di errore completo.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2014-12-10T14:06:54+00:00

    Grazie Norman.

    Ho eseguito la tua versione.

    Dopo aver estratto correttamente la prima directory mi da il seguente errore:

    Ti ho inviato la cattura schermo della struttura directory per email.

    Grazie

    La risposta è stata utile?

    0 commenti Nessun commento