首页 > 解决方案 > MS Access:一键上传多个文件

问题描述

我正在尝试通过使用按钮一次将多个文件上传到访问数据库中。但是,一次只能上传一个文件。

单击按钮时,它会调用一个子过程。我的代码如下:

Private Sub btnImport_Click() 'Calls the procdure that imports raw files Call Module1.ImportRawFiles End Sub

Public Sub ImportRawFiles()
Dim oFileDiag As Office.FileDialog
Dim path As String: path = ""
Dim oFSO As New FileSystemObject
Dim FileSelected As Variant

Set oFileDiag = Application.FileDialog(msoFileDialogFilePicker) ''Picks file to import
oFileDiag.AllowMultiSelect = True ''Allows multiple files to be selected
oFileDiag.Title = "Please select the reports to upload"
oFileDiag.Filters.Clear
oFileDiag.Filters.Add "Excel Spreadsheets", "*.xlsx, *.xls" ''Only allows xlsx and xls file types to upload

If oFileDiag.Show Then
    For Each FileSelected In oFileDiag.SelectedItems
           Form_Homepage.txtFileName = FileSelected
    Next
End If

If Nz(Form_Homepage.txtFileName, "") = "" Then
    MsgBox "No files selected please select a file"
    Exit Sub
End If

If oFileDiag.SelectedItems.Count > 0 Then path = oFileDiag.SelectedItems(1)
    If Len(path) > 0 Then
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, oFSO.GetFileName(Form_Homepage.txtFileName), path, 1

    MsgBox "The " & oFSO.GetFileName(Form_Homepage.txtFileName) & " file has been uploaded"
Else
    MsgBox "File not found"
End If 

有谁知道为什么只上传一个文件?

标签: vbams-access

解决方案


您正在遍历所有选定的文件以进行分配Form_Homepage.txtFileName,但在同一循环中不执行任何其他操作:

If oFileDiag.Show Then
    For Each FileSelected In oFileDiag.SelectedItems
           Form_Homepage.txtFileName = FileSelected
    Next
End If

因此,在循环结束时,分配最后一个选定的文件,忽略所有其他文件,然后您以后的逻辑语句仅在该文件上执行。

一种解决方案是将您的操作逻辑移至同一循环。因此,将您的 IF 语句移到赋值循环中,这样它们就可以对变量的每次迭代赋值进行操作。


推荐阅读