Ms access MS Access窗体按钮,允许用户浏览/选择文件,然后将文件导入表

Ms access MS Access窗体按钮,允许用户浏览/选择文件,然后将文件导入表,ms-access,vba,Ms Access,Vba,在我的数据库中,我可以使用以下命令按钮导入文件: DoCmd.TransferText acImportDelim,“来自导入的原始数据”\u导入规范,“来自导入的原始数据”,D:\Users\Denise\u Griffith\Documents\Griffith\PRIME RECON FILES\jdaqawmslessfileEmailDLX\u SHPREC\u 2017-04-26\u 03-33-47.csv,True,“” 但是我想让用户选择要导入的文件,因为文件名每天都会根据创

在我的数据库中,我可以使用以下命令按钮导入文件: DoCmd.TransferText acImportDelim,“来自导入的原始数据”\u导入规范,“来自导入的原始数据”,D:\Users\Denise\u Griffith\Documents\Griffith\PRIME RECON FILES\jdaqawmslessfileEmailDLX\u SHPREC\u 2017-04-26\u 03-33-47.csv,True,“”

但是我想让用户选择要导入的文件,因为文件名每天都会根据创建日期和时间而不同。我找到了这个站点(),并能够弹出对话框,允许用户导航和选择文件,但我不知道如何合并它,以便使用我创建的规范将所选文件导入到相应的表中


请帮忙

您需要设置对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更改为函数并检查返回值

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

因此,您可以返回一个
Long
值,例如0、1、2,分别表示中止、成功和错误。但为了避免出现“幻数”,我将创建并返回一个枚举类型,如下所示:

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

您可以在此处阅读有关枚举的更多信息:

在文件对话框代码的某个地方,将变量设置为所选文件夹的文件路径和文件名,然后在我转到工具时在TransferText中引用该变量..“引用”显示为灰色,我无法进入以选择任何内容。我关闭了VBA编辑器,然后重新打开并能够选择它。这工作得很好。非常感谢你!如果用户单击对话框中的“取消”按钮,是否有办法使消息框显示“操作已取消”?相反,当完成时,消息框可能会显示“文件已导入”?非常感谢!我会试试看,效果如何。很有魅力。你是炸弹科斯塔斯!