Access and VBA: 在导入过程中将日期添加到一列的所有值

Access and VBA: Add date to all values of one column during import

我在导入 excel 文件时向列添加日期时遇到问题。我的设置如下:

我有一个 AccessDB,我想每天在其中导入一份 Excel 报告。我有一个表单,我可以在其中浏览报告并通过单击第二个按钮将其导入名为“tblImport”的 table。这很好用。

我现在在“tblImport”中有一个空列,我想在其中为非空的每一行添加报告日期。空列已定义为日期列。日期位于文件名“YYYYMMDD.xlsx”的末尾。 完美的解决方案是直接从文件名中获取日期并将其添加到列中。但是在我必须添加日期的表单中添加一个输入框或字段也可以。

但是,我找到的每个解决方案都不适用于我的代码。

如有任何建议,我将不胜感激。

提前致谢!

表单代码如下:

Private Sub btnBrowse_Click()
    Dim diag As Office.FileDialog
    Dim item As Variant
    
    Set diag = Application.FileDialog(msoFileDialogFilePicker)
    diag.AllowMultiSelect = False
    diag.Title = "Please select an Excel Spreadsheet"
    diag.Filters.Clear
    diag.Filters.Add "Excel Spreadsheets", "*.xls, *.xlsx"
    
    If diag.Show Then
        For Each item In diag.SelectedItems
            Me.txtFileName = item
        Next
    End If
    

End Sub

Private Sub btnImportSpreadsheet_Click()
    Dim FSO As New FileSystemObject
    
    If Nz(Me.txtFileName, "") = "" Then
        MsgBox "Please select a file!"
        Exit Sub
    End If
    
    If FSO.FileExists(Me.txtFileName) Then
        ExcelImport.ImportExcelSpreadsheet Me.txtFileName, FSO.GetFileName(Me.txtFileName)
    Else
        MsgBox "File not found!"
    End If
End Sub

导入函数如下所示:

Public Sub ImportExcelSpreadsheet(fileName As String, tableName As String)

On Error GoTo BadFormat
    DoCmd.RunSQL ("DELETE * FROM tblImport;")
    DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "tblImport", fileName, True, "A1:F4"
    MsgBox "Import successful!"
    Exit Sub
    
BadFormat:
    MsgBox "The file you tried to import was not an Excel spreadsheet."

End Sub
´´´

您需要编写一个函数来获取日期。这是基于上述格式中位于同一位置的日期。您可以详细说明这段代码,最好在日期转换函数中也添加一些错误检查。现在还早,所以还没有完全测试 :)

Public Sub ImportExcelSpreadsheet(fileName As String, tableName As String)

On Error GoTo BadFormat
    docmd.runsql ("DELETE * FROM tblImport;")
    docmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "tblImport", fileName, True, "A1:F4"
    '   ***
    docmd.runsql ("Update tblImport set DateImported='" & GetDateFromFileName(fileName) & "'")
    '   ***
    MsgBox "Import successful!"
    Exit Sub
    
BadFormat:
    MsgBox "The file you tried to import was not an Excel spreadsheet."

End Sub

Function GetDateFromFileName(strInputFileName As String) As Date

Dim strDatePart As String
Dim intFinalDot As Integer

intFinalDot = InStrRev(strInputFileName, ".")
strDatePart = Mid(strInputFileName, intFinalDot - 8, 8)

GetDateFromFileName = DateSerial(Mid(strDatePart, 1, 4), Mid(strDatePart, 5, 2), Mid(strDatePart, 7, 2))

End Function