2012-06-12 2 views
3

엑셀 시트와 인터페이스하고 행을 통과 한 다음 행에 셀을 넣은 다음 Access 테이블에 다시 정보를 가져 오는 Microsoft Access에서 VBA 스크립트를 작성하려고합니다. 여기 Excel과 인터페이스하는 MS Access VBA 스크립트

당신은 아래 그림에서 최종 결과의 간단한 예를 볼 수 있습니다

For Each Row 
    For Each Cell in the Row 
     Read the Cell 
     Create a new Record in the Access table with the info from the cell 
    End For Each 
End For Each 

코드 - 일부 sudo는 것입니다.

우리가 안좋다 무엇 needed- 무엇

enter image description here

enter image description here

내가 전에 코딩, 그러나 결코 VBA에있다; 그래서 어떤 도움을 주시면 감사하겠습니다! 당신의 도움을 주셔서 감사합니다!!!

+0

[Remou wrote] (http://stackoverflow.com/a/10999515/190829)를 읽으십시오. 이미이 작업을 수행하는 기본 제공 방법이 있습니다. 각 셀을 반복하지 않고 배열로 범위를 읽는 것이 더 좋을 것입니다. – JimmyPena

답변

2

@Remou suggested와 같이 먼저 Excel 워크 시트에 대한 링크를 만듭니다. 다음 예제에서는 링크의 이름을 "tblExcelData"로 지정했습니다. 그런 다음 "tblDestination"은 요청한대로 워크 시트 행의 각 "셀"에 대해 별도의 레코드를 저장합니다. tblDestination에서 Seq#은 길이가 정수이고 Field NameField Value은 모두 텍스트입니다.

Public Sub foo20120612a() 
    Dim db As DAO.Database 
    Dim rsSrc As DAO.Recordset 
    Dim rsDest As DAO.Recordset 
    Dim fld As DAO.Field 

    Set db = CurrentDb 
    Set rsSrc = db.OpenRecordset("tblExcelData", dbOpenSnapshot) 
    Set rsDest = db.OpenRecordset("tblDestination", _ 
     dbOpenTable, dbAppendOnly) 
    Do While Not rsSrc.EOF 
     For Each fld In rsSrc.Fields 
      If fld.Name <> "Seq#" Then 
       With rsDest 
        .AddNew 
        ![Seq#] = CLng(rsSrc![Seq#]) 
        ![Field Name] = fld.Name 
        ![Field Value] = fld.value 
        .Update 
       End With 
      End If 
     Next fld 
     rsSrc.MoveNext 
    Loop 
    rsDest.Close 
    Set rsDest = Nothing 
    rsSrc.Close 
    Set rsSrc = Nothing 
    Set db = Nothing 
End Sub 
+0

당신. 아르. A. 생명의 은인. – ohGosh

2

다양한 마법사 또는 DoCmd의 TransferSpreadsheet 메서드를 사용하여 Excel 시트를 연결하고 연결된 Excel 테이블을 사용하여 동작 쿼리를 실행하는 것이 좋습니다.

유니온 쿼리가 필요합니다. 링크 된 스프레드 시트를 t라고 부릅니다.

SELECT * INTO Table1 
FROM (
    SELECT [Seq#], "Name" As [Field Name], [Name] As [Field Value] 
    FROM t 
    UNION ALL 
    SELECT [Seq#], "Location" As [Field Name], [Location] As [Field Value] 
    FROM t 
    UNION ALL 
    SELECT [Seq#], "Car" As [Field Name], [Car] As [Field Value] 
    FROM t) imp 

INSERT INTO Table1 
SELECT * FROM (
    SELECT [Seq#], "Name" As [Field Name], [Name] As [Field Value] 
    FROM t 
    UNION ALL 
    SELECT [Seq#], "Location" As [Field Name], [Location] As [Field Value] 
    FROM t 
    UNION ALL 
    SELECT [Seq#], "Car" As [Field Name], [Car] As [Field Value] 
    FROM t) imp 

필드 및 열 이름에서 공백과 예약어를 제거하면 편리합니다.

일반적으로 위에 표시된 것처럼 별표 (*)를 사용하는 입력란을 나열하는 것이 좋습니다.

+0

마법사를 사용하여 Excel에서 데이터를 가져와 잘 작동했습니다. 그러나 데이터를 구성하기 전에 작업 쿼리를 사용한 적이 없습니다. 액션 쿼리를 사용하여 사진에 표시되는 방식으로 데이터 서식을 지정하는 방법에 대해 조금 자세히 설명해 주시겠습니까? – ohGosh

관련 문제