使用VB导入而不是手动导入

时间:2017-01-13 19:39:01

标签: vba ms-access import

我目前知道如何手动导入这些文件,但我希望通过导入按钮执行vb代码以自动执行。链接到导入按钮的字段要求您输入日期并单击导入。点击导入后,我希望它根据文件名上的日期获取文件。

这些文件是文本文件,文件名有两种格式:

第1格式 - P.RR1234.ABCDEF.D160112.T123456

第二格式 - G1234.ABCDEF.D160112.T123456

以下是我当前表单的vb代码(我目前已将其映射到我的桌面,但网络/共享路径上有100个文件位于格式中):

          Option Compare Database

Private Sub cmdImport_Click()

On Error GoTo Click_Err

    If Nz(txtReportDate, "") = "" Then
        MsgBox "NOTICE! Please enter the Report Month you wish to Import."

        Else

    Dim rs As Recordset
    Dim sql As String

    'Loop through recordset of all Contracts and import files
    sql = "SELECT DISTINCT FROM AAAAB_CE"
    Set rs = CurrentDb.OpenRecordset(sql)
    rs.MoveLast
    rs.MoveFirst
    If rs.RecordCount > 0 Then
        Do While rs.EOF = False
            ImportFile rs!DISTINCT
            rs.MoveNext
        Loop
    End If

    DoCmd.Hourglass True
    DoCmd.SetWarnings False

    DoCmd.Hourglass False
    DoCmd.SetWarnings True
    MsgBox "Finished Importing!"
    DoCmd.OpenQuery "query_Files_Loaded_CE", acViewNormal, acReadOnly

click_Exit:
    DoCmd.Hourglass False
    DoCmd.SetWarnings True
    Exit Sub

Click_Err:
    DoCmd.Hourglass False
    MsgBox "Error Detected: " & Err.Number & " - " & Err.Description, vbCritical, "Error"
    Resume click_Exit

       Exit Sub
    End If

End Sub

模块:

Option Explicit
Option Compare Database

Public Function ImportFile(Contract As String)

DoCmd.TransferText acImportFixed, "123_Files", "AAAAB_CE", "C:\Users\123456\Desktop\TestingFolder\test.txt", False

End Function

我正在尝试将这些文本文件导入到一个表中。有很多文件,所以手动不够。

目前,如果我在表单文本日期输入一个随机日期并单击导入。它导入我选择的文件,但格式完全错误。这很奇怪,因为我保存的规格是以正确的格式完成的。

总而言之,我正在努力完成三件事。

1)通过在表单上的字段中输入日期自动导入(日期将是文件名的一部分)并单击导入按钮 2)以正确的结构,固定列导入文本文件 3)如果输入的日期不正确,请不要导入任何内容。

1 个答案:

答案 0 :(得分:1)

我不能在不知道txt文件和文件本身使用的日期格式的情况下对此代码进行故障排除,但这就是我要攻击它的方式:

  • 使用Dir循环遍历指定文件夹位置的文件,搜索包含日期的.txt文件,

  • 然后通过传递文件名来调用您的ImportFile函数(实际上是一个子编号?)。

希望你能够遵循逻辑......

Public Sub sampleSub()
Dim dirStr As String
Dim filePath As String
Dim fileDate As Date

filePath = "C:\Users\123456\Desktop\TestingFolder\"
On Error GoTo doNothing:
fileDate = DateValue(InputBox("NOTICE! Please enter the Report Month you wish to Import."))

dirStr = Dir(filePath & "\" & "*" * Format(fileDate, "FileDateFormat") & "*" & ".txt")
Do Until dirStr = ""
    Call ImportFile(dirStr)
Loop

Exit Sub
doNothing:
Call MsgBox("Error Detected: " & Err.Number & " - " & Err.Description, vbCritical, "Error")
End Sub

Public Sub ImportFile(fileName As String)
Call DoCmd.TransferText(acImportFixed, "123_Files", "AAAAB_CE", fileName, False)
End Sub

希望这有帮助, TheSilkCode