Flexibele import-macro

Status
Niet open voor verdere reacties.

jofred

Gebruiker
Lid geworden
16 dec 2006
Berichten
172
Voor verschillende csv-bestanden gebruik ik een importmacro om de kolommen juist te importeren in Excel.
Op zich werkt dat wel goed, maar de "importdefinitie" zit in de code en als het csv-bestand wijzigt moet de code worden aangepast.

Code:
Sub ImportMacro()
'
' Macro om CSV-bestanden te importeren
'
'
    Range("A1:A5").TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
        TextQualifier:=xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, _
        Semicolon:=False, Comma:=False, Space:=False, Other:=False, _
        FieldInfo:=Array(Array(1, 2), Array(2, 1), Array(3, 4), Array(4, 9)), _
        TrailingMinusNumbers:=True

End Sub

Ik heb een eenvoudig voorbeeldbestand bijgesloten

Nu vraag ik me af of het ook mogelijk is om deze importdefinities uit te lezen uit een definitiebestand (bijv. een excel-werkblad).
Hieronder heb ik de definities weergegeven waar ik aan zit te denken

importdefinitie.jpeg

Wie helpt mij aan bruikbare code?
 

Bijlagen

Ik vraag me af of die definiets er toe doen in een delimited fields bestand.
Bij mij hebben ze in ieder geval geen effekt.
Waarschijnlijk wel bij de workbooks.opentext methode.

Ik zou dit gebruiken:

Code:
Sub tst()
    With GetObject("G:\OF\scholen.csv")
       .Sheets(1).Columns(1).TextToColumns , , , , True, False, False, False, False
       sn = .Sheets(1).Cells(1).CurrentRegion.Resize(, 3)
       .Close False
    End With
    
    ThisWorkbook.Sheets(1).Cells(1).Resize(UBound(sn), UBound(sn, 2)) = sn
End Sub
 
SNB,

Dank voor je reactie, maar dit is niet helemaal wat ik zoek.
Het gaat mij er nl. om dat als de lay-out van het importbestand scholen.csv wordt gewijzigd door bijv. het toevoegen van 2 kolommen, waarvan de eerste moet overgeslagen en de tweede als tekst moet worden geïmporteerd, ik op zoek ben naar een manier van vastleggen die het mogelijk maakt een gewijzigd importbestand goed te behandelen zonder de code aan het passen.

Jofred
 
op basis van jouw voorbeeld:

Array(Array(1, 2), Array(2, 1), Array(3, 4), Array(4, 9))

in Cel A1: "1,2"
in cel B1: "2,1"
in cel C3: "3,4"
in cel D1: "4,9"

Code:
Sub M_snb()
  With GetObject("G:\OF\scholen.csv")
    .Sheets(1).Columns(1).TextToColumns , , , , True, False, False, False, False,,array(split(cells(1,1),","),split(cells(1,2),","),split(cells(1,3),","),split(cells(1,4),","))
    sn = .Sheets(1).Cells(1).CurrentRegion.Resize(, 3)
    .Close False
  End With
    
  ThisWorkbook.Sheets(1).Cells(1).Resize(UBound(sn), UBound(sn, 2)) = sn
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan