ACCESS : Inserire Colonna DoCmd.TransferSpreadsheet

di il
1 risposte

ACCESS : Inserire Colonna DoCmd.TransferSpreadsheet

Buongiorno a tutti,
chiedo il vostro aiuto per risolvere questo problema .. mi scuso anzitutto se dico cavolate ma non mastico molto bene vba.

Ho una cartella di Windows che contiene 85 file .xlsx ognuno con 1 o + fogli di lavoro.Di questi fogli di lavoro me ne interessano solo 4(se presenti) Dovrei creare 4 tabelle che contengano, accodati, i valori dei fogli di interesse per gli 85 xlsx.
Sono riuscito ad accodarli ora il problema è che cosi facendo mi perdo il nome del file di provenienza .
Vorrei, nelle tabelle create, aggiungere una colonna che mi indichi il nome del file di provenienza per ognuna delle righe accodate...
Spero di essere stato chiaro.. vi riporto codice
Grazie

Public Sub Carica()

On Error Resume Next

Dim File_Input_Completo, File_Output_Completo, File_Input_SoloNome As String
Dim Cartella, FileDaCaricare As String
Dim FileCaricati As Integer
Dim PrimoFile As Boolean
Dim i As Byte

Dim Nome_Fogli(4), Nome_Tabella(4) As String

N_Fogli = 4

Nome_Fogli(1) = "Piano"
Nome_Fogli(2) = "Scope"
Nome_Fogli(3) = "Issues & Risks"
Nome_Fogli(4) = "Actions"

'Nome_Tabella(1) = "Piano_Temp"
'Nome_Tabella(2) = "Scope_Temp"
'Nome_Tabella(3) = "Issues_Risks_Temp"
'Nome_Tabella(4) = "Actions_Temp"

Screen.MousePointer = 11
DoCmd.SetWarnings False
'
'------- Definisce parametri
'
Cartella = "D:\Users\a434775\Desktop\Prova\"
FileDaCaricare = Cartella & "*.xlsx"
File_Input_SoloNome = FileDaCaricare

PrimoFile = True
'
'------- Inizio caricamento del primo file
'
Do While Not Len(File_Input_SoloNome) = 0
If PrimoFile Then
File_Input_SoloNome = Dir(FileDaCaricare)
Else
File_Input_SoloNome = Dir()
End If
PrimoFile = False

File_Input_Completo = Cartella & File_Input_SoloNome

For i = 1 To 1


DoCmd.TransferSpreadsheet acImport, 10, "Piano_Tot", File_Input_Completo, False, Nome_Fogli(1) & "!A1:EK3000"

DoCmd.TransferSpreadsheet acImport, 10, "Scope_Tot", File_Input_Completo, False, Nome_Fogli(2) & "!A1:E3000"
DoCmd.TransferSpreadsheet acImport, 10, "Issues & Risks_Tot", File_Input_Completo, False, Nome_Fogli(3) & "!A1:K3000"
DoCmd.TransferSpreadsheet acImport, 10, "Actions_Tot", File_Input_Completo, False, Nome_Fogli(4) & "!A1:K3000"


Next i
Loop
'
'==========================================================================================================
'
DoCmd.SetWarnings True
Screen.MousePointer = 0
MsgBox "File caricati con successo"

End Sub


1 Risposte

  • Re: ACCESS : Inserire Colonna DoCmd.TransferSpreadsheet

    Rally00 ha scritto:


    ...
    Vorrei, nelle tabelle create, aggiungere una colonna che mi indichi il nome del file di provenienza per ognuna delle righe accodate...
    Risposta breve: no, non puoi in base a quello che hai scritto.
    Risposta un po' più articolata: potresti farlo quasi agevolmente se nelle varie schede la prima colonna contenesse il nome dei campi, perché potresti aggiungere alla tabella un altro campo, per il nome del file, ed immediatamente dopo il transferspreadsheet fare un update dei record con il nome del file ancora non valorizzato. Puoi intervenire sul file xlsx affinché ci sia il nome dei campi nella prima riga?
    Altrimenti devi cambiare approccio perché con trasferspreadsheet non si va da nessuna parte.
    Potresti usare una select di accodamento direttamente dal file di excel ma richiede un po' di conoscenza delle query e di sql.

    Risposta con visione più ampia: il codice che hai scritto (che non va scritto in blu ma racchiuso tra tag code e identato adeguatamente) ha bisogno di molte correzioni, anche se per adesso fa quello che deve fare.
    E' tutto dovuto alla tua scarsa masticazione di VBA, per usare le tue parole e... l'unico modo per rimediare è imparare a masticare, tanto e bene.
    Dim File_Input_Completo, File_Output_Completo, File_Input_SoloNome As String
    Dim Cartella, FileDaCaricare As String
    ...
    Dim Nome_Fogli(4), Nome_Tabella(4) As String
    Sei consapevole che solo l'ultima variabile di ogni riga è del tipo esplicitato mentre tutte le altre sono Variant? Poi Nome_Tabella non lo usi nemmeno (le righe sono state commentate)
    A cosa serve la variabile N_Fogli? non la usi.
    Hai all'inizio del modulo Option Explicit che obbliga a dichiarare tutte le variabili?
    L'uso delle variabili FileDaCaricare, File_Input_SoloNome e File_Input_Completo è caotico.
    A cosa serve un ciclo così?
    For i = 1 To 1
    ...
    Nex i
    Sarà eseguito sempre e solo 1 volta, non ha senso.
    Se non usi un sistema "automatico" di scorrimento all'interno dell'array Nome_Fogli è poco utile usare quella struttura, tanto vale usare 4 variabili di testo per i 4 nomi.
Devi accedere o registrarti per scrivere nel forum
1 risposte