ms-access - MS Access 表单按钮,允许用户浏览/选择文件,然后将文件导入到表中

标签 ms-access vba

在我的数据库中,我可以使用以下命令创建命令按钮导入文件: DoCmd.TransferText acImportDelim,“导入的原始数据_导入规范”,“导入的原始数据”,D:\Users\Denise_Griffith\Documents\Griffith\PRIME RECON FILES\jdaqawmslesfilesemailDLX_SHPREC_2017-04-26_03-33-47.csv,True, “”

但我想让用户选择要导入的文件,因为文件名根据创建的日期和时间每天都不同。我找到了这个网站( http://access.mvps.org/access/api/api0001.htm ),并且能够弹出对话框以允许用户导航和选择文件,但我不知道如何合并它,因此所选文件是使用规范导入的创建,并放入适当的表中。

请帮忙!

最佳答案

您需要设置对 Microsoft Office 对象库的引用。

Public Sub ImportDocument()
    On Error GoTo ErrProc

    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    With fd
        .InitialFileName = "Some folder"
        .Title = "Some Title"
        With .Filters
            .Clear
            .Add "CSV documents", "*.csv", 1
        End With
        .ButtonName = " Import Selected "
        .AllowMultiSelect = False

        If .Show = 0 Then GoTo Leave
    End With

    Dim selectedItem As Variant
    For Each selectedItem In fd.SelectedItems
        DoCmd.TransferText acImportDelim, "Raw Data from Import_ Import Specification", "Raw Data from Import", selectedItem, True, ""
    Next

Leave:
    Set fd = Nothing
    On Error GoTo 0
Exit Sub

ErrProc:
    MsgBox Err.Description, vbCritical
    Resume Leave
End Sub

根据用户评论进行更新:

您必须将Sub更改为Function并检查返回值。

最简单的方法是返回一个 Boolean,其中 FALSE 表示中止,TRUE 表示成功。但是,通过这样做,您可以排除错误场景,因为中止和错误都将返回FALSE

因此您可以返回一个Long值,例如0、1、2分别表示Aborted、Success和Error。为了避免“魔数(Magic Number)”,我将创建并返回一个 Enum 类型,如下所示:

Public Enum TaskImportEnum
    Aborted = 0 'default
    Success
    Failure
End Enum

Public Function ImportDocument() As TaskImportEnum
    On Error GoTo ErrProc

    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFilePicker)

    With fd
        .InitialFileName = "Some folder"
        .Title = "Dialog Title"
        With .Filters
            .Clear
            .Add "CSV documents", "*.csv", 1
        End With
        .ButtonName = " Import Selected "
        .AllowMultiSelect = False   'Change this to TRUE to enable multi-select

       'If aborted, the Function will return the default value of Aborted
        If .Show = 0 Then GoTo Leave
    End With

    Dim selectedItem As Variant
    For Each selectedItem In fd.SelectedItems
        DoCmd.TransferText acImportDelim, "Raw Data from Import_ Import Specification", "Raw Data from Import", selectedItem, True, ""
    Next selectedItem

   'Return Success
   ImportDocument = TaskImportEnum.Success

Leave:
    Set fd = Nothing
    On Error GoTo 0
    Exit Function

ErrProc:
    MsgBox Err.Description, vbCritical
    ImportDocument = TaskImportEnum.Failure  'Return Failure if error
    Resume Leave
End Function

最后,您可以像这样调用该函数:

Sub Import()

    Dim status_ As TaskImportEnum
        status_ = ImportDocument

    Select Case status_
        Case TaskImportEnum.Success:
            MsgBox "Success!"

        Case TaskImportEnum.Failure:
            MsgBox "Failure..."

        Case Else:
            MsgBox "Aborted..."
    End Select

End Sub

您可以在此处阅读有关 Enum 类型的更多信息:http://www.cpearson.com/excel/Enums.aspx

关于ms-access - MS Access 表单按钮,允许用户浏览/选择文件,然后将文件导入到表中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43744977/

相关文章:

sql - 合并两个不同时间的数据表 preferred in access

sql-server - 如何更新外键

excel - UDF从access数据库检索数据

sql - MS Access 数据库中的最短路径

vba - 编译错误: Expected End Sub

vba - 查找分配给主驱动器的字母

Excel VBA 偏移函数

ms-access - Showplan.out 在安装了 MS-Access 2003 和多个版本的 Office 的 Windows 7 中?

excel - 确保公共(public) VBA 方法不会出现在 Excel 宏列表中

vba - Outlook VbaProject.OTM 时间戳在更改时不会更新