CSV_importeren met VBA

  • Onderwerp starter Onderwerp starter pvag
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

pvag

Gebruiker
Lid geworden
7 jan 2009
Berichten
64
Beste experts,
Heb gisteren een nieuwe vraag geplaatst maar blijkbaar iets fout gegaan, omdat hij als opgelost stond gemarkeerd.
ik heb een excelwerkblad met de naam CSV_import. In dat werkblad kan ik de naam van het path naar het CSV bestand,
wat bij mijn bank is gedownload steeds wijzigen, zodat ik niet steeds de VBA-code hoef te wijzigen

ik heb op het forum een code gevonden om CSV bankbestand leesbaar te maken in excel
en vervolgens op te slaan als excel bestand. Omdat de VBA-code steeds wisselt leek het
me handig om in een werkblad ( CSV-import ) twee cellen te maken waarin ik in de 1e cel
( C13 ) het path kan invoeren waar het CSV bestand staat, en in de 2e cel ( C14 ) de naam
van het weg te schrijven excel bestand kan invoeren.
In de code zouden de beide cellen moeten worden weergegeven als bijv:
sWorkbook = Sheets("CSV_import").Range("C13").Value - voor het path
sFileName = Sheets("CSV_import").Range("C14").Value

Ik krijg overigens op de 3e regel
.Sheets(1).Cells(1).CurrentRegion.resize etc steeds een foutmelding.
Laat ik die regel weg dan wordt er een bestand aangemaakt met de naam " Bank ".

Wie kan wil me helpen.
Bij voorbaat dank.
Ton

Code:
Sub snb()
with Workbooks.Open("C:\Users\Ton\Downloads\Bank.csv") ' moet worden: Sheets("CSV_import").Range("C13").Value
.Sheets(1).Cells(1).CurrentRegion.resize(, 13).Copy Workbooks("Database.xlsx").Sheets("Database").Cells(Rows.Count, 1).End(xlUp).Offset(1)
.close false
end with
End Sub
[ /Code]
 
Je code tags zouden werken, als je geen spatie in de tweede had gezet. We doen dat als uitleg altijd wel, omdat je anders de tekst van de tags niet ziet; zou ik [/code] zonder spatie typen, dan wordt de tag uitgevoerd (althans: als ik ook een
Code:
 ervoor zou zetten.
Verder snap ik niet helemaal wat je bedoelt. Je hebt het over variabelen waar je verder niks mee doet.
 
Code:
sWorkbook = Sheets("CSV_import").Range("C13").Value
sFileName = Sheets("CSV_import").Range("C14").Value
With Workbooks.Open(sWorkbook & "\" & sFileName) ' moet worden: Sheets("CSV_import").Range("C13").Value
Wat is nu het probleem? worden de gegevens op de verkeerde plaats of verkeerde bestand opgeslagen? waar moeten de gegevens dan wel komen?
 
Beste alphamax,

Het was de bedoeling dat het CSV bestand zou worden geopend, bewerkt zodat niet alles in één of twee kolommen zou komen staan.
Ik heb nu de hele zaak omgegooid. Ik open nu een CSV bestand dat ik kan kiezen in C:\Downloads
Het geopende bestand wordt buiten het huidige excel bestand geopend, wat betekent dat het dus een op zichzelf staand bestand is, maar totaal onleesbaar
Nu kopieer ik handmatig de kolommen A t/m I in het geopende blad, en plak die in het huidige Workbook in de map (Geïmporteerd).
In de map Geïmporteerd bewerk ik de geplakte data met een VBA code, zodat het bestand leesbaar wordt door de kolommen, regelhoogte en lettergrootte e.d. aan te passen. Later maak ik een macro die de zaak kopieeërt naar het werkblad (Geïmporteerd) en die de zaak ordend zoals ik eerder aangaf. Dat werkt nu goed. Ik zou nu een code nodig hebben die alleen het werkblad (Geïmporteerd) uit de gehele sheet opslaat als excel werkblad, met de naam die wordt gehaald uit Sheets("CSV_import").Range("C14") Dus alleen dat opslaan en niet de gehele sheet.
Misschien weet jij de oplossing, ik ben maar een leek die van alles probeert tot het werkt.
Alvast bedankt.

Code:
Private Sub ZetAllesGoed_Click()
Range("A:A").ColumnWidth = 9
Range("B:B").ColumnWidth = 35
Range("C:C").ColumnWidth = 20
Range("D:D").ColumnWidth = 20
Range("E:E").ColumnWidth = 6
Range("F:F").ColumnWidth = 6
Range("G:G").ColumnWidth = 12
Range("H:H").ColumnWidth = 15
Range("I:I").ColumnWidth = 255

Columns("A:A").Select
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlCenter
End With

Range("A1:H2").Select
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
End With

Range("I2").Select
    With Selection
        .HorizontalAlignment = xlLeft
        .VerticalAlignment = xlCenter
     End With

Range("A1:I1").Select
    Selection.Font.Bold = True
    
Range("A2:I300").Select
    Selection.Copy
        
        With Selection.Font
        .Name = "Arial"
        .Size = 11
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
    With Selection.Font
        .Name = "Arial"
        .Size = 8
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ThemeColor = xlThemeColorLight1
        .TintAndShade = 0
        .ThemeFont = xlThemeFontNone
    End With
    Range("A2:H2").Select
    Selection.Font.Bold = True
    With Selection
        .HorizontalAlignment = xlGeneral
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    With Selection
        .HorizontalAlignment = xlCenter
        .VerticalAlignment = xlCenter
        .WrapText = False
        .Orientation = 0
        .AddIndent = False
        .IndentLevel = 0
        .ShrinkToFit = False
        .ReadingOrder = xlContext
        .MergeCells = False
    End With
    Application.CutCopyMode = False
ActiveSheet.Select

Dim sPad As String
 Dim Pad() As String
 Dim i As Integer
 Dim sYear As String
 sYear = CStr(Year(Date))
    
    sPad = Sheets("CSV_import").Range("C15").Value & ("\") & sYear & ("\")       ' ' is path voor mapnaam
    Pad = Split(sPad, "\")
    sPad = Pad(0)
    For i = 1 To UBound(Pad)
        sPad = sPad & "\" & Pad(i)
        If Dir(sPad, vbDirectory) = "" Then
            MkDir sPad
        End If
    Next i
    
  Dim sFileName As String
 sFileName = Sheets("CSV_import").Range("C14").Value
ActiveSheet.SaveAs FileName:= _
sPad & sFileName, FileFormat:= _
xlOpenXMLWorkbook, Password:="", WriteResPassword:="", _
ReadOnlyRecommended:=False, CreateBackup:=False

End Sub
 
csv = comma separated value
maar
het csv-formaat is niet internationaal gestandaardiseerd

open het csv-bestand met kladblok
1. kan je de inhoud lezen of is het gecodeerd?
2. welk scheidingsteken heb je, komma, punt-komma of iets anders
3. welke bank heb je? welk bestandsformaat? zo kan ik het zelf opzoeken op internet
 
Hoi alphamax,

Bedank voor je bericht.
Ik ben er inmiddels voor het overgrote deel uit. Ik zal proberen het uit te leggen zodat je een inzicht krijgt in het geheel. ik heb op het forum een Excel-bestand gehaald met de naam "Database", dat bestaat uit 2 werkbladen te weten: Database en Log. Ik heb dat bestand wat verbouwd, de bestaande werkbladen een andere naam gegeven en enkele werkbladen toegevoegd te weten: "CSV_import" (waar variable gegevens worden ingevoerd) en de werkbladen "Bank_1e_kwart, Bank_2e_kwart, Bank_3e_kwart en Bank_4e_kwart. Vanuit het werkblad "Import_CSV" open ik een CSV-bestand, wat als een totaal nieuwe sheet wordt geopend. Ik kopieer in het CSV-bestand A1:I300. De gekopieerde cellen plak ik in het werkblad "Bank_1e_kwart" en druk daarna op de knop die een script activeert om de kolommen, rijen en opmaak te regelen, zodat alles overzichtelijk wordt. Helaas kan ik om privé reden geen CSV-bestand meesturen. Mogelijk heb je zelf en CSV-bestand van ING of een zelfde indeling om te testen.

Wat ik eigenlijk nog zou willen is dat het CSV-bestand niet in een aparte sheet word geopend, maar meteen in een werkblad in dezelfde sheet kan importeren door middel van een knop "Importeer in dit werkblad". Ik stuur het Excel bestand mee, waarvan ik enkele werkbladen heb verwijderd omdat het bestand te groot was. Let niet op hoe het gemaakt is want ik ben een totale leek en probeer maar wat.

Gr, Ton
 

Bijlagen

Laatst bewerkt:
Beste experts,

Op de eerste plaats dank voor jullie inzet.
Het laatste advies wat jkpieterse me gegeven heeft is de oplossing voor mijn probleem.
Nu kan ik inderdaad het CSV-bestand direct in een werkblad van de sheet importeren.
Nu ga ik kijken of ik de procedure voor het importeren om kan zetten in VBA.
Nogmaals iedereen die heeft ingezet mijn probleem op te lossen heel hartelijk bedankt.

Gr, Ton
 
Je VBA hoeft alleen maar het "vernieuwen" commando aan te roepen:
Code:
ActiveSheet.Querytables(1).Refresh False
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan