Ga naar inhoud

VBA: .csv import via macro


Dixon

Aanbevolen berichten

Beste,

Ik ben via wat opzoek werk al aan een macro geraakt die een zelf gekozen .csv bestand opent in Excel.

Er zijn echter 2 dingen die ontbreken aan de macro:

  1. In het csv bestand staan gegevens die gescheiden zijn met een tab vb:
    Nummer code
    1515 A4
    Als ik dit via deze macro importeer, dan wordt alle info in de eerste kolom neergezet. Indien ik het csv bestand gewoon open met Excel, dan worden de kolommen wel opgesplitst.
    Is er een mogelijkheid om dit te importeren zoals Excel dit automatisch doe? (zie afbeelding)

    post-26352-1417705884,9536_thumb.jpg
  2. Indien ik een tweede keer importeer, komen er gewoon gegevens bij. Eigenlijk zou de Macro het tabblad 'Data' moeten schoonmaken of de gegevens moeten overschrijven.

Kan iemand de macro aanvullen aangezien ik hier niets van ken?

Bedankt.

De Macro:

Sub load_csv()

Dim fStr As String

With Application.FileDialog(msoFileDialogFilePicker)

.Show

If .SelectedItems.Count = 0 Then

MsgBox "Cancel Selected"

Exit Sub

End If

'fStr is the file path and name of the file you selected.

fStr = .SelectedItems(1)

End With

With ThisWorkbook.Sheets("Data").QueryTables.Add(Connection:= _

"TEXT;" & fStr, Destination:=ThisWorkbook.Sheets("Data").Range("$A$1"))

.Name = "CAPTURE"

.FieldNames = True

.RowNumbers = False

.FillAdjacentFormulas = False

.PreserveFormatting = True

.RefreshOnFileOpen = False

.RefreshStyle = xlInsertDeleteCells

.SavePassword = False

.SaveData = True

.AdjustColumnWidth = True

.RefreshPeriod = 0

.TextFilePromptOnRefresh = False

.TextFilePlatform = 437

.TextFileStartRow = 1

.TextFileParseType = xlDelimited

.TextFileTextQualifier = xlTextQualifierDoubleQuote

.TextFileConsecutiveDelimiter = False

.TextFileTabDelimiter = True

.TextFileSemicolonDelimiter = False

.TextFileCommaDelimiter = True

.TextFileSpaceDelimiter = False

.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)

.TextFileTrailingMinusNumbers = True

.Refresh BackgroundQuery:=False

End With

End Sub

Link naar reactie
Delen op andere sites

Het zinnetje dat erbij moet is groen gemarkeerd. Het moet staan waar het nu staat zodat het pas leeggemaakt wordt als er een tekst-bestand geselecteerd is.

Sub load_csv()

Dim fStr As String

With Application.FileDialog(msoFileDialogFilePicker)

.Show

If .SelectedItems.Count = 0 Then

MsgBox "Cancel Selected"

Exit Sub

End If

'fStr is the file path and name of the file you selected.

fStr = .SelectedItems(1)

End With

ThisWorkbook.Sheets("Data").Cells.Delete

With ThisWorkbook.Sheets("Data").QueryTables.Add(Connection:= _

"TEXT;" & fStr, Destination:=ThisWorkbook.Sheets("Data").Range("$A$1"))

.Name = "CAPTURE"

.FieldNames = True

.RowNumbers = False

.FillAdjacentFormulas = False

.PreserveFormatting = True

.RefreshOnFileOpen = False

.RefreshStyle = xlInsertDeleteCells

.SavePassword = False

.SaveData = True

.AdjustColumnWidth = True

.RefreshPeriod = 0

.TextFilePromptOnRefresh = False

.TextFilePlatform = 437

.TextFileStartRow = 1

.TextFileParseType = xlDelimited

.TextFileTextQualifier = xlTextQualifierDoubleQuote

.TextFileConsecutiveDelimiter = False

.TextFileTabDelimiter = True

.TextFileSemicolonDelimiter = False

.TextFileCommaDelimiter = True

.TextFileSpaceDelimiter = False

.TextFileColumnDataTypes = Array(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1)

.TextFileTrailingMinusNumbers = True

.Refresh BackgroundQuery:=False

End With

End Sub

aangepast door plx
Link naar reactie
Delen op andere sites

plx,

Hartelijk dank. De sheet wordt inderdaad gewist! Ik sta al een stap dichter bij de uiteindelijke oplossing.

Het tweede probleem is echter dat alle info uit het .csv document in de eerste kolom terecht komt.

Dit zou niet mogen aangezien ik de info nodig heb die in kolom 'Volgner.' en 'Rust afwz' staat.

Het .csv document zou er dus in moeten verschijnen in verschillende kolommen zoals in het .csv bestand.

Iemand een idee?

- - - Updated - - -

[ATTACH]34606[/ATTACH]

Voorbeeld hoe het uiteindelijk zou moeten.

Gewoon .csv bestand geopend met Excel en op voltooien gedrukt.

Data.xlsx

Link naar reactie
Delen op andere sites

Deze keer het importeren in kolommen (Allicht kan dat ook efficiënter?) Natuurlijk zijn de eerste rijen daardoor wat veranderd.

Bekijk de code eens. De macro heet LoadData.

Wat niet perfect juist is, kan je zelf wijzigen.

Het bestand wordt lijn per lijn in in regel gelezen.

Deze regel wordt opgesplitst met de Mid() functie.

Nu zal allicht je voorblad moeten aangepast worden?

Overzicht.xlsm

aangepast door plx
Link naar reactie
Delen op andere sites

plx,

Hartelijk dank. Het werkt bijna.

Ik heb inderdaad op het eerste blad een formule staan die in het tabblad 'Data' gaat zoeken in bepaalde kolommen.

Blijkbaar wordt de gedefineerde tabel in de 'VERT.ZOEKEN' functie gewist bij de import. Er komt dan het volgende te staan: 'Data!#VERW!' i.p.v. 'Data!$A:$J'.

Ik heb hier op liggen denken maar ik kan niets bedenken dat de kolommen niet gebruikt. Weet iemand een alternatief voor de VERT.ZOEKEN functie of kent iemand een andere oplossing?

Bedankt.

Link naar reactie
Delen op andere sites

Kan je me uitleggen wat er moet komen?

Onderaan de code heb ik het volgende zinnentje toegevoegd:

Sheets("Data").Range("$A:$J").Name = "gegevens"

Dit zorg ervoor dat de volledige kolommen A tem J de naam "gegevens" krijgt.

Ik heb nu een eenvoudige verticaal zoeken. Ik begreep niet meteen wat de er moest komen.

Overzicht.xlsm

Link naar reactie
Delen op andere sites

Ok, import werkt goed, de gegevens verschijnen nog steeds niet in het tabblad. Ik heb ook al met een extra macro proberen te werken die 'refreshed'. Wat er moet gebeuren is dat het de 'Data!#VERW!' vervangt door 'Data!$A:$J'. Dit gebeurt echter niet.

Waarschijnlijk is dat ook niet de goede manier.

Wat er moet komen is:

Het nummer dat in de kolom 'Volg. Nr.' staat vb: 96, 56 of 190

Indien daar niets staat, moet er getoond worden wat in de kolom 'Rust afw' staat vb: X, OG, T, WV

Indien daar ook niets staat moet er 'TC' getoond worden.

Link naar reactie
Delen op andere sites

Gast
Dit topic is nu gesloten voor nieuwe reacties.
×
×
  • Nieuwe aanmaken...

Belangrijke informatie

We hebben cookies geplaatst op je toestel om deze website voor jou beter te kunnen maken. Je kunt de cookie instellingen aanpassen, anders gaan we er van uit dat het goed is om verder te gaan.