Opgelost access importeren van csv bestand

Dit topic is als opgelost gemarkeerd

tepke

Gebruiker
Lid geworden
3 okt 2004
Berichten
237
beste ik heb een vraag over het importeren van een csv bestand in access. Nu heb ik een bestand dat ik altijd op dezelfde plaats neer zet waarna ik op een knop in mijn menu druk waarbij access het importeer. werkt op zich goed voor mezelf maar ik wil het uitbreiden voor andere gebruikers die het bestand ook op een andere plaats op hun pc neer kunnen zetten. Ik gebruik nu het commando [DoCmd.RunSavedImportExport ("Import-urenregistratie")] in mijn VBA

zou graag eerst naar een map willen gaan dmv een windows openbox en daar het bestand laten uitkiezen. heeft iemand een idee hoe dit te maken?
 
Ideeën genoeg; het is een vrij standaard procedure om een bestand (of map) te openen en daar een bestand van in te lezen. Wellicht is het handig als je eerst jouw volledige code hier neer zet.

Hier alvast een voorbeeldje:
Code:
Private Sub cmdFileDialog_Click()

 ' Requires reference to Microsoft Office ##.0 Object Library.
Dim fDialog As Office.FileDialog
Dim varFile As Variant
   ' Clear listbox contents.
   Me.FileList.RowSource = ""
   ' Set up the File Dialog.
   Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
   With fDialog
      ' Allow user to make one selection in dialog box
      .AllowMultiSelect = False
      ' Set the title of the dialog box.
      .Title = "Please select one file"
      ' Clear out the current filters, and add our own.
      .Filters.Clear
      .Filters.Add "CSV bestanden", "*.csv"
      .Filters.Add "Tekst bestanden", "*.txt"
      .Filters.Add "All Files", "*.*"
      ' Show the dialog box. If the .Show method returns True, the
      ' user picked at least one file. If the .Show method returns
      ' False, the user clicked Cancel.
      If .Show = True Then
         'Loop through each file selected and add it to our list box.
         For Each varFile In .SelectedItems
            Me.FileList.AddItem varFile
         Next
      Else
         MsgBox "You clicked Cancel in the file dialog box."
      End If
   End With
End Sub
 
Laatst bewerkt:
Inderdaad, voorbeeld zat te vinden/verzinnen. Zoals deze om één bestand te selecteren:
Code:
Private Sub VerwerkBestand_Click()
On Error GoTo Fout

Dim tBestand As String

With Application.FileDialog(3)
    .Title = "Bestand selecteren"
    .Filters.Clear
    .Filters.Add "CSV-bestanden", "*.csv"
    .AllowMultiSelect = False
    .InitialFileName = "D:\Downloads\" 'dit is een voorbeeld voor testdoeleinden
    If .Show <> 0 Then
        tBestand = .SelectedItems.Item(1)
        MsgBox "Het bestand " & tBestand & " wordt verwerkt", vbInformation, "Verwerking"
        'rest van de verwerking van tBestand
    End If
End With

Einde:
    Exit Sub

Fout:
    MsgBox Err.Description
    Resume Einde
End Sub
 
Heb je nou klakkeloos mijn code overgenomen? :)
Wel een verschil overigens, voor TS: Peter gebruikt dezelfde code, maar dan met Late Binding. Ik prefereer Early Binding, zodat je weet welke parameters je gebruikt. Want een beginnende ontwerper weet echt niet wat Application.FileDialog(3) betekent. Dan geef ik toch echt de voorkeur aan Application.FileDialog(msoFileDialogFilePicker). Ook al omdat je met Early Binding kunt werken met IntelliSense, zodat je de parameters kunt kiezen.

Mijn voorbeeld is overigens ook ingericht om één bestand te kiezen. Maar het leuke is: met een kleine aanpassing (.AllowMultiSelect = True) kun je met exact dezelfde code óók meerdere bestanden tegelijk inlezen.

Nogmaals: als je een beetje kan programmeren, kun je hier wel zelf verder mee komen. Heb je meer hulp nodig, dan wil ik toch graag jouw volledige code zien.
 
Laatst bewerkt:
hoi octafish heb jouw code geprobeerd maar krijg foutmeldingen waar ik geen raad mee weet, code van xps werkt wel een heel eind maar krijg ik ook nog niet aan de praat maar kom wel een stuk verder
 
Nogmaals: wij hebben/kennen jouw situatie niet. Als iets niet werkt, heeft het niet zoveel zin om te zeggen dat het niet werkt. Ik gaf een voorbeeld van een (echt wel werkende) procedure. Die moet je uiteraard wél aanpassen naar jouw situatie. Zo wordt het voorbeeld gebruikt om een Listbox te vullen. Dat is echter niet jouw bedoeling. Natuurlijk werkt deze code zonder aanpassingen niet...
Dus: kom op met je code!
 
hier twee aangepaste versies die het gekozen bestand in een variabele zetten, waar je wel verder mee moet kunnen komen.
Code:
Private Sub cmdFileDialog_Click()
 ' Requires reference to Microsoft Office 11.0 Object Library.
Dim fDialog As Office.FileDialog
Dim varFile As Variant, sFile As String

    Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
   With fDialog
      .AllowMultiSelect = False
      .Title = "Kies het gewenste bestand"
      .Filters.Clear
      .Filters.Add "CSV bestanden", "*.csv"
      .Filters.Add "Tekst bestanden", "*.txt"
      .Filters.Add "All Files", "*.*"
      If .Show = True Then
         For Each varFile In .SelectedItems
            tFile = tFile & IIf(tFile<>"",",","") & varFile
         Next
      Else
         MsgBox "You clicked Cancel in the file dialog box."
      End If
   End With

End Sub

En met Late Binding:

Code:
Private Sub cmdFileDialog_Click()
Dim varFile As Variant, sFile As String

   With Application.FileDialog(3)
      .AllowMultiSelect = False
      .Title = "Kies het gewenste bestand"
      .Filters.Clear
      .Filters.Add "CSV bestanden", "*.csv"
      .Filters.Add "Tekst bestanden", "*.txt"
      .Filters.Add "All Files", "*.*"
      If .Show = True Then
         For Each varFile In .SelectedItems
            tFile = tFile & IIf(tFile<>"",",","") & varFile
         Next
      Else
         MsgBox "You clicked Cancel in the file dialog box."
      End If
   End With

End Sub
 
Ik zie dat ik de variable sFile in de procedure zelf als tFile heb gebruikt. Moet je natuurlijk nog even aanpassen, als je de code gaat testen :). Tenzij je Option Explicit niet gebruikt; dan hoef je zelfs geen enkele variabele te declareren.
 
beste ik krijg een fout melding bij het importeren wat zou dit kunnen zijn? uren specificatie bestaat wel heb ik wel gemaakt bij het importeren van de file

accessfout.PNG

Code:
Private Sub Knop79_Click()
On Error GoTo Fout

Dim tBestand As String

With Application.FileDialog(3)
    .Title = "Bestand selecteren"
    .Filters.Clear
    .Filters.Add "CSV-bestanden", "*.csv"
    .AllowMultiSelect = False
    .InitialFileName = "D:\Downloads\" 'dit is een voorbeeld voor testdoeleinden
    If .Show <> 0 Then
        tBestand = .SelectedItems.Item(1)
        MsgBox "Het bestand " & tBestand & " wordt verwerkt", vbInformation, "Verwerking"       'rest van de verwerking van tBestand
        
        
    DoCmd.SetWarnings False                                                         'meldigen uitzetten
    DoCmd.OpenQuery "verwijderen_Urenregistratie_tabel"                             'tabel leeg maken voor nieuwe import
    DoCmd.TransferText acImportDelim, "uren", "Urenregistratie", tBestand, False    'importeren van nieuwe gegevens
    DoCmd.SetWarnings True                                                          'meldigen aanzetten
    MsgBox "Nieuwe dataset is geïmporteerd."
        
    End If
End With

Einde:
    Exit Sub

Fout:
    MsgBox Err.Description
    Resume Einde
End Sub
 
na wij proberen is het gelukt heb een fout ontdekt en nu werkt het bedankt voor de info van jullie
 
Ik ben geen fan van nutteloze meldingen. Jij zo te zien wel :). Wat heeft het volgens jou voor zin om de gebruiker te pesten door die te laten klikken op twee msgboxen? Eén (als de import klaar is) is toch genoeg?
 
Terug
Bovenaan Onderaan