Volgens mij krijg je een hoop foutmeldingen.
In plaats van een hele berg code achter een knop die ook elders gebruikt zou kunnen worden zou ik kiezen voor die code in een module:
Code:
Option Compare Database
Option Explicit
Public Enum FileType
Access = 0
Excel = 1
End Enum
Public Function SelectSingleFile(strCurDir As String, strDialogTitle As String, intFilter As FileType) As String
' Hetzelfde als SelectOneFile maar dan met behulp van de built-in Application.FileDialog.
On Error GoTo Err_SelectSingleFile
Dim fd As FileDialog
Dim varSelectedItem As Variant
Dim strFile As String
'Create a FileDialog object as a Folder Picker dialog box.
Set fd = Application.FileDialog(msoFileDialogFilePicker)
strFile = ""
With fd
.Title = strDialogTitle
.ButtonName = "&Select"
.InitialView = msoFileDialogViewDetails
'Add a filter that includes MDB or XLS files and make it the first item in the list.
.Filters.Clear
Select Case intFilter
Case FileType.Access
.Filters.Add "Access databases", "*.mdb", 1
Case FileType.Excel
.Filters.Add "Excel spreadsheet", "*.xls", 1
End Select
.Filters.Add "Alle bestanden", "*.*", 2
'Sets the initial file filter to number 1.
.FilterIndex = 1
If .Show = -1 Then
For Each varSelectedItem In .SelectedItems
If Len(strFile) > 0 Then
strFile = strFile & ", " & varSelectedItem
Else
strFile = varSelectedItem
End If
Next varSelectedItem
Else
strFile = ""
End If
End With
SelectSingleFile = strFile
Set fd = Nothing
Exit_SelectSingleFile:
Set fd = Nothing
Exit Function
Err_SelectSingleFile:
' msgbox Err, Error$, "SelectSingleFile", "basFileDialog"
msgbox "Hier moet jouw persoonlijke foutmelding komen"
Resume Exit_SelectSingleFile
End Function
Zet deze code in een module bijvoorbeeld basFileDialog. De code moet je ook nog een beetje aanpassen om door het resultaat te lopen.
Code:
Option Compare Database
Option Explicit
Public lngFile As Long ' Global long variable 'file is misschien een gereserveerd woord
Public Function Import_BOM()
[COLOR="red"]Dim [COLOR="Magenta"]file[/COLOR] As Long[/COLOR]
Forms([COLOR="Red"]Formulier_Importeren[/COLOR]).Controls([COLOR="red"]List20[/COLOR]).SetFocus
Forms([COLOR="red"]Formulier_Importeren[/COLOR]).Controls([COLOR="red"]List20[/COLOR]).ListIndex = 0
file = Forms(Formulier_Importeren).Controls(List20).ListIndex
DoCmd.TransferSpreadsheet acImport, 3, "BOM", [COLOR="red"]"file"[/COLOR], False, ""
End Sub
Zijn Formulier_Importeren en List20 variabelen? Je gebruikt ze wel zo. Ze zijn echter nergens gedeclareerd en aangezien je "Option Explicit" aan hebt staan zullen die ook wel een foutmelding genereren. Als het namen zijn zet ze dan tussen "List20" dubbele quotes.
Het hoeft niet maar het is wel netter: zet je declaraties bovenin je procedure en "file" kan een gereserveerd woord zijn. Maak daar lngFile van.
In het Transferspreadsheet importeer je de spreadsheet met de naam "file".
Code:
docmd.TransferSpreadsheet acImport,acSpreadsheetTypeExcel9 ,"BOM",lngfile,false
Je importeert dus een bestand bijvoorbeeld "20.xls". Als dat ook "BOM2008.xls" kan zijn dan is het type lngFile verkeerd en dat zou dan
moeten zijn.
HTH