Import excel bestand conversiefout

Status
Niet open voor verdere reacties.

Nico84

Gebruiker
Lid geworden
21 jul 2011
Berichten
187
Ik wil een excel bestand importeren in access, echter geeft hij enkele keren een conversiefout.

Dit wordt veroorzaakt door 1 kolom. Deze bevat numerieke waarden (1, 100), maar ook tekst waarden (E-12, V1, E1)

Na wat zoeken op internet begreep ik dat access de eerste 25 regels scant van het bestand en bepaalt wat de gegevenstype is.
Dus als de eerste 25 regels van mijn bestand alleen numerieke waarden bevat geeft access het gegevenstype numeriek mee.
In de tabel staat het veld ingesteld als korte tekst.


Is er een mogelijkheid dat access deze kolom altijd als gegevenstype tekst (korte tekst) aanneemt, zodat er geen conversiefout ontstaan?
 
Ik dacht zelfs dat het om de eerste 5 rijen ging, niet de eerste 25. Maar dat maakt niet uit, dat lost je probleem niet op. Je zou natuurlijk een eerste rij in je tabel met tekst kunnen zetten, dan ben je er sowieso vanaf. Maar dat kan wellicht niet. In dat geval kun je een Importspecificatie maken tijdens het importeren, dan kun je per veld aangeven welk type je wilt importeren. De voorstellen van Access kloppen dus meestal wel, maar voor dit specifieke veld moet je dat dus aanpassen. De specificatie kun je opslaan, zodat je hem de volgende keer weer kunt gebruiken.
 
Bedankt voor je reactie.

Het bestand wat ik ontvang is een .xls

Als ik deze wil importeren krijg ik niet de mogelijkheid om via de knop geavanceerd een importspecificatie aan te maken en op te slaan, zodat ik
in vba met onderstaande code het .xls bestand kan importeren
Code:
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "tblImport", stBestand, True

Het enige wat ik kan doen is de importbewerking opslaan.
Maar kan ik deze ook via VBA uitvoeren?
En kan ik ook de bestandslocatie opgeven in vba?
 
Onderstaande code gebruik ik om het .xls bestand vanuit access te openen en een aantal kolomkoppen van naam te veranderen/toevoegen.
Is het mogelijk via access om het bestand als CSV op te slaan?

Dan is het probleem van importeren ook opgelost.

Code:
    'Excel file openen, aantal cellen naam aanpassen/toevoegen en wijzigingen opslaan
    Set xl = CreateObject("Excel.Application")
    xl.workbooks.Open stBestand
    xl.Visible = True
    Set wbk = xl.ActiveWorkbook
    Set wks = xl.ActiveSheet
    With wks
        .Range("m1").Value = "Productgroep"
        .Range("m1").Value = "Inkooptotaal"
        .Range("w1").Value = "MargeProcent"
    End With
    
    wbk.Close SaveChanges:=True
    xl.Quit
 
Maar kan ik deze ook via VBA uitvoeren? En kan ik ook de bestandslocatie opgeven in vba?
2 x Ja.
En je hebt gelijk: importeren van een csv bestand is veel beter, want dan kun je wél een importspecificatie maken en opslaan. Die je dan weer gebruikt bij het importeren. Waarom je de kolomkoppen zou veranderen is mij een klein raadsel, omdat je die koppen toch al hebt ingesteld in je importtabel? Lijkt mij een overbodige handeling. En uiteraard kun je een xls opslaan als een csv bestand maar dan niet net Close en SaveChanges, maar met SaveAs. Zoals je ook zou doen in Excel. Je kunt de code zelfs in Excel maken en overzetten naar je Access procedure. Zeker makkelijk te doen als je Early Binding gebruikt en geen Late Binding. Heb je écht Late binding nodig, zet dan, als alles werkt en klaar is, de declaraties om.
 
Met onderstaande code wordt de excel file opgeslagen als csv bestand.
Code:
wbk.SaveAs "C:\Users\nico\Desktop\Map1.csv", 6


stBestand = Me.txtBestandslocatieImport
In stBestand wordt de locatie opgeslagen C:\Users\nico\Desktop\Map1.xls

Met welke code kan ik de extensie weghalen zodat ik de locatie en bestandnaam kan gebruiken voor de csv.
stBestandCSV= stBestand (min de extensie)
wbk.SaveAs stBestandcsv & ".csv"
 
Laatst bewerkt:
Met het Split commando.
Code:
Dim stBestandCSV As String
Dim wbk As Workbook
    Set wbk = ActiveWorkbook
    stBestandCSV = Split(CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\Map1.xls", ".") _
        (LBound(Split(CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\Map1.xls", "."))) & ".csv"
    wbk.SaveAs stBestandCSV, FileFormat:=xlCSV
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan