복붙노트

[SQL] MS Access 테이블로 내보내기 데이터를 엑셀 VBA를 사용하여

SQL

MS Access 테이블로 내보내기 데이터를 엑셀 VBA를 사용하여

나는 현재 코드가 각 행을 통해 MS 액세스 테이블에 데이터를 삽입 루핑, MS Access 데이터베이스 워크 시트에서 데이터 내보내기에 다음 코드를 사용하고 있습니다.

Public Sub TransData()

Application.ScreenUpdating = False
Application.EnableAnimations = False
Application.EnableEvents = False
Application.DisplayAlerts = False

ActiveWorkbook.Worksheets("Folio_Data_original").Activate

Call MakeConnection("fdMasterTemp")

For i = 1 To rcount - 1
    rs.AddNew
    rs.Fields("fdName") = Cells(i + 1, 1).Value
    rs.Fields("fdDate") = Cells(i + 1, 2).Value
    rs.Update

Next i

Call CloseConnection

Application.ScreenUpdating = True
Application.EnableAnimations = True
Application.EnableEvents = True
Application.DisplayAlerts = True

End Sub
Public Function MakeConnection(TableName As String) As Boolean
'*********Routine to establish connection with database

   Dim DBFullName As String
   Dim cs As String

   DBFullName = Application.ActiveWorkbook.Path & "\FDData.mdb"

   cs = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & DBFullName & ";"

   Set cn = CreateObject("ADODB.Connection")

   If Not (cn.State = adStateOpen) Then
      cn.Open cs
   End If

   Set rs = CreateObject("ADODB.Recordset")

   If Not (rs.State = adStateOpen) Then
       rs.Open TableName, cn, adOpenKeyset, adLockOptimistic
   End If

End Function
Public Function CloseConnection() As Boolean
'*********Routine to close connection with database

On Error Resume Next
   If Not rs Is Nothing Then
       rs.Close
   End If


   If Not cn Is Nothing Then
       cn.Close
   End If
   CloseConnection = True
   Exit Function

End Function

위의 코드 기록의 몇 백 개 라인에 대한 벌금을 작동하지만, 분명히 수출에 더 많은 데이터를 할 것이다, 25000 개 기록처럼, 모든 레코드를 반복하지 않고 수출에 가능하며 Ms.Access에 대한 모든 데이터를 삽입 대량으로 하나의 SQL INSERT 문 한 가지 표?

어떤 도움이 많이 이해할 수있을 것이다.

편집 : 문제가 해결

그냥은 불과 3 초 (27,648 기록을 사람이에 대한 추구 경우 정보를, 나는 검색을 많이 해봤 나를 위해 잘 작동 될 수있는 다음 코드를 발견하고는 SQL INSERT로 인해 실제 빠르고 !!!! ) :

Public Sub DoTrans()

  Set cn = CreateObject("ADODB.Connection")
  dbPath = Application.ActiveWorkbook.Path & "\FDData.mdb"
  dbWb = Application.ActiveWorkbook.FullName
  dbWs = Application.ActiveSheet.Name
  scn = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & dbPath
  dsh = "[" & Application.ActiveSheet.Name & "$]"
  cn.Open scn

  ssql = "INSERT INTO fdFolio ([fdName], [fdOne], [fdTwo]) "
  ssql = ssql & "SELECT * FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh

  cn.Execute ssql

End Sub

그럼에도 불구하고, 대신에 "선택 *"사용하는 특정 필드의 이름을 추가 할 필드 이름을 추가 할 수있는 다양한 방법을 시도 작동하지만 지금은 작동 할 수 없습니다.

해결법

  1. ==============================

    1.많은 수의 행과 Excel의 범위를 들어 당신은 Excel에서 Access.Application 개체를 만드는 경우 일부 성능 향상을 본 후 Access로 Excel 데이터를 가져 오는 데 사용할 수 있습니다. 아래의 코드는 다음의 시험 데이터를 포함하는 동일한 Excel 문서에서 VBA 모듈에

    많은 수의 행과 Excel의 범위를 들어 당신은 Excel에서 Access.Application 개체를 만드는 경우 일부 성능 향상을 본 후 Access로 Excel 데이터를 가져 오는 데 사용할 수 있습니다. 아래의 코드는 다음의 시험 데이터를 포함하는 동일한 Excel 문서에서 VBA 모듈에

    Option Explicit
    
    Sub AccImport()
        Dim acc As New Access.Application
        acc.OpenCurrentDatabase "C:\Users\Public\Database1.accdb"
        acc.DoCmd.TransferSpreadsheet _
                TransferType:=acImport, _
                SpreadSheetType:=acSpreadsheetTypeExcel12Xml, _
                TableName:="tblExcelImport", _
                Filename:=Application.ActiveWorkbook.FullName, _
                HasFieldNames:=True, _
                Range:="Folio_Data_original$A1:B10"
        acc.CloseCurrentDatabase
        acc.Quit
        Set acc = Nothing
    End Sub
    
  2. ==============================

    2.@ 아메드

    @ 아메드

    아래 코드는 그 MS 액세스에 삽입 명명 된 범위에서 지정 필드. 이 코드의 좋은 점은 당신이 내가 엑셀 ​​열 "하하"라는 한 볼 수 있듯이 (당신이 사용하는 경우 * 다음 필드는 엑셀 및 액세스 사이에 정확히 일치해야한다) 도대체 당신이 원하는대로 엑셀에서 필드 이름을 수 있다는 것입니다 심지어 액세스 열이 "DTE"라고하지만.

    Sub test()
        dbWb = Application.ActiveWorkbook.FullName
        dsh = "[" & Application.ActiveSheet.Name & "$]" & "Data2"  'Data2 is a named range
    
    
    sdbpath = "C:\Users\myname\Desktop\Database2.mdb"
    sCommand = "INSERT INTO [main] ([dte], [test1], [values], [values2]) SELECT [haha],[test1],[values],[values2] FROM [Excel 8.0;HDR=YES;DATABASE=" & dbWb & "]." & dsh
    
    Dim dbCon As New ADODB.Connection
    Dim dbCommand As New ADODB.Command
    
    dbCon.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & sdbpath & "; Jet OLEDB:Database Password=;"
    dbCommand.ActiveConnection = dbCon
    
    dbCommand.CommandText = sCommand
    dbCommand.Execute
    
    dbCon.Close
    
    
    End Sub
    
  3. from https://stackoverflow.com/questions/16161865/using-excel-vba-to-export-data-to-ms-access-table by cc-by-sa and MIT license