【问题标题】:Importing using VB not manual import使用VB导入而不是手动导入
【发布时间】:2017-05-29 06:37:12
【问题描述】:

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

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

第一种格式 - 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)+3) 和 2) 是非常不同的、不相关的问题。请把它们分成两个问题。对于 2) 我们将需要您的表结构、输入格式和导入规范(请参阅pcreview.co.uk/threads/…
  • @Andre 我的表有 20 列(最后两列是导入日期和文件名。所有列都是文本,除了 ImportDate 是日期/时间)。对于表结构,我可以为您提供哪些更多信息?设置文本文件以匹配表格。当我手动导入它(它是一个固定的纺织品)时,我现在可以正确导入它了。
  • @Andre 输入格式是什么意思?就像您如何在我的表单上的字段中键入日期一样?如果是这样,它应该是 MMDDYYYY。另外,对于导入规范,我正在使用访问,我如何使用您提供的 SQL 语句来给我我的规范?我在我的模块和表单中运行查询,我没有得到任何结果。保存的导入不显示我的规范的详细信息。我的规范保存为:我应该为哪些问题打开一个新线程?问题 1 和 3?
  • @Andre 我目前正在重新进行手动导入,当我单击前进时,我收到一条消息,指出下标超出范围。我想这就是我为您获取规范的地方。

标签: vba ms-access import


【解决方案1】:

在不知道 txt 文件中使用的日期格式和文件本身的情况下,我无法解决此代码,但这就是我要攻击它的方式:

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

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

希望你能遵循逻辑..

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

希望这会有所帮助, 丝绸代码

【讨论】:

    猜你喜欢
    • 2022-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-05
    • 2022-01-05
    • 1970-01-01
    • 2018-02-22
    相关资源
    最近更新 更多