【问题标题】:How to Import Excel File to Microsoft Access 2013如何将 Excel 文件导入 Microsoft Access 2013
【发布时间】:2019-07-16 22:47:42
【问题描述】:

我有一个 Access 2013 数据库,其中所有表都链接到 SQL Server 2016 表。我有一个 Excel 2013 (.xlsx) 文件,我需要将它导入到 Ms Access 中的一个表中,该表通过 vba 代码链接到 SQL Server(xlsx 和表中的所有字段都是相同的)

我所有的 VBA 代码都驻留在 Access 数据库中,我有一个带有事件按钮的表单,我尝试使用 de“transferspreadsheet”,一个用于 sql 的“插入到”子句,但它们都没有为我工作

这是我的代码,

xtRuta2 表单中具有路径的字段名称 Dim strArchivo2 String ' 文件 xlsx 的路径 c:\reports\mireporte.xlsx 将 miAlerta2 调暗为字符串 将 ssql 作为字符串调暗

strArchivo2 = txtRuta2

miAlerta2 = MsgBox("¿您要为" & strArchivo2 & "导入新信息吗?" & vbCrLf & vbCrLf & "此操作将更新所有信息", vbExclamation + vbOKCancel, "¡INFORMATION IMPORT ALERT! ")

如果 miAlerta2 = vbOK 那么 varAlert2 = MsgBox("请确认您要导入新信息?", vbExclamation + vbOKCancel, "¡CONFIRMATION IMPORT ALERT!") If varAlert2 = vbOK Then

      'DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12, "tbl_ZSales_Export Worksheet", strArchivo2, True, "Export Worksheet$"

            ssql = "INSERT INTO [tbl_Export Worksheet] select * FROM OPENROWSET('Microsoft.ACE.OLEDB.12.0', 'Excel 12.0;Database=" & strArchivo2 & ";HDR=YES', 'SELECT * FROM [Export Worksheet$)'"

            'CurrentDb.Execute ssql

    MsgBox "Import Finished", vbExclamation + vbOKOnly

endif 结束如果

你能帮我写出正确的代码吗

谢谢问候!

【问题讨论】:

  • 你的错误是什么?
  • 错误提示:错误 3131 en proc。 cmdImportar2_Click de Documento VBA form_frmImprtar(FROM 子句中的语法错误。)
  • 我很确定 Access sql 不支持打开的行集。
  • 好的,正确的代码应该是什么?

标签: sql vba ms-access ms-access-2013


【解决方案1】:

这段代码(后期bdingin与excel交互)用于将excel表格转换为文本文件,然后导入您选择的表格。我更喜欢使用这种方法,因为访问有一个恼人的习惯,即在使用传输电子表格时尝试为您解释您的数据。通过创建导入规范(使用此方法需要这样做),您可以轻松地预定义数据类型。

Option Compare Database
Option Explicit

Private Sub stuff()
    On Error GoTo GetAccrualFile_Err
    Dim fileLoc As String
    Dim path As String, Sep As String, NewTextFile As String, WholeLine As String
    Dim oXL As Object, sheet As Object
    Dim i As Long, j As Long, counteri As Long, counterj As Long
    Dim bringOver As Variant
    DoCmd.SetWarnings False
    DoCmd.Hourglass True
    counteri = 0
    counterj = 0
    Sep ="your prefered delimiter"
    DoCmd.RunSQL "DELETE * FROM TBL"
    fileLoc = "UNC PATH AND FILE NAME" & ".xlsx"
    path = Left(fileLoc, InStrRev(fileLoc, "\") - 1) & "\"
    NewTextFile = "UNC PATH AND FILE NAME" & ".txt"
    Set oXL = CreateObject("Excel.Application")
    With oXL
        .WorkBooks.Open FileName:=path & Dir$(fileLoc)
        Open NewTextFile For Output As #2
        bringOver = .Worksheets("your sheet name").UsedRange  'you might need to adjust this line to get the sheet your after
        For i = LBound(bringOver, 1) To UBound(bringOver, 1)
            For j = LBound(bringOver, 2) To UBound(bringOver, 2)
                WholeLine = WholeLine & bringOver(i, j) & Sep
                counterj = counterj + 1
            Next j
            'used if you want to skip column headers
            If counteri <> 0 Then
                Print #2, WholeLine
            End If
            WholeLine = ""
            counteri = counteri + 1
            counterj = 0
        Next i
        counteri = 0
        Erase bringOver
    End With    
    Close #2
    DoCmd.TransferText acImportDelim, "importspecname", "tbltoimportto", NewTextFile, False
    '***************************************************************************************
    'you will need to learn how to set up import specs, as well as understand the arguments for DoCmd.TransferText  
    '***************************************************************************************
CleanUp:
    DoCmd.SetWarnings True
    DoCmd.Hourglass False
    On Error Resume Next
    DoEvents
    oXL.Quit
    oXL.Application.Quit
    If Dir(NewTextFile) <> "" Then Kill NewTextFile
    Erase bringOver
    DoCmd.SetWarnings True
    DoCmd.Hourglass False
    Exit Sub
GetAccrualFile_Err:
    DoCmd.SetWarnings True
    DoCmd.Hourglass False
    msgbox "An error has occured.  " & " " & ERR.Number & " " & ERR.Description & " "
    GoTo CleanUp
    Resume
End Sub

【讨论】:

  • 这个问题是我的表与 sql server 链接,并且不接受 transfertext 或 TransferSpreadsheet,这就是我需要一个将文件插入到链接的表中的 sql 代码跨度>
  • 当我使用 de Transfertext 或 TransferSpreadSheet 方法时,Access 女士所做的是创建一个新表,而不是将数据附加(插入)到我拥有的链接表中。
  • 然后插入到一个新表中,然后使用 sql 选择 * 到另一个表中。看起来像一个简单的工作aorund
  • 这不是我想要的,我认为它必须有正确方法的代码才能将数据正确插入到sql链接表中
  • IDK 为什么你认为这行不通?传输文本默认附加。我一直在加载文件时这样做。由于访问夸克,它确实有效,也是我的首选方法。
【解决方案2】:

试试 EPPlus,这是一个免费的库,可让您从 .Net 平台管理 Excel 文件。 这里有教程:https://riptutorial.com/epplus

【讨论】:

  • 这是对原始问题的评论,而不是答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-22
  • 1970-01-01
  • 2015-04-01
  • 1970-01-01
相关资源
最近更新 更多