Access의 Excel 통합 문서에 연결된 테이블에서는 데이터를 변경, 추가 또는 삭제할 수 없습니다.

원래 KB 번호: 904953

증상

Microsoft Office Access 2007 또는 Microsoft Office Access 2003 또는 Microsoft Access 2002에서는 Microsoft Excel 통합 문서에 연결된 테이블에서 데이터를 변경, 추가 또는 삭제할 수 없습니다.

또한 다음 조건 중 하나가 true인 경우 이 동작이 발생할 수 있습니다.

  • Excel 통합 문서에 연결된 테이블에서 데이터를 검색하는 쿼리를 빌드합니다.
  • Excel 통합 문서에 연결된 테이블의 데이터에 액세스하는 양식을 작성합니다.
  • DAO 또는 ADO를 사용하여 Excel 통합 문서에 연결된 테이블을 프로그래밍 방식으로 업데이트합니다.

연결된 Excel 통합 문서의 레코드를 업데이트하는 쿼리를 수행할 때 다음 메시지가 표시됩니다.

작업은 업데이트 가능한 쿼리를 사용해야 합니다.

DAO를 사용하여 Excel 통합 문서에 연결된 테이블을 프로그래밍 방식으로 업데이트할 때 다음 메시지가 표시됩니다.

런타임 오류 '3027'을(를) 업데이트할 수 없습니다. 데이터베이스 또는 개체는 읽기 전용입니다.

ADO에서 연결된 데이터를 업데이트하려고 하면 메시지가 동일하지만 오류 번호는 다음과 유사할 수 있습니다.

-2147217911(80040e09)

Excel 통합 문서에 레코드를 삽입하는 쿼리를 실행하면 Excel 통합 문서가 Access 데이터베이스에 연결되지 않은 경우에도 다음과 같은 오류 메시지가 표시됩니다.

작업은 업데이트 가능한 쿼리를 사용해야 합니다.

원인

이 예상 동작은 다음 조건 중 하나가 true일 때 발생합니다.

  • Office Access 2007을 사용하고 있습니다.
  • Microsoft Office 2003 SP2(서비스 팩 2) 이상 서비스 팩 또는 Office 2003 SP2 이후에 릴리스된 Access 2003 업데이트를 설치했습니다.
  • 2005년 10월 18일자 Access 2002(KB904018)에 대한 업데이트를 설치했습니다.
  • Microsoft Office 2003 SP2(서비스 팩 2) 이상 서비스 팩, Office 2003 SP2 이후에 릴리스된 Access 2003 업데이트 또는 2005년 10월 18일 이후의 Access 2002(KB904018) 업데이트를 포함하는 Access 런타임 애플리케이션을 설치했습니다.

해결 방법

이 예상 동작을 해결하려면 다음 방법 중 하나를 사용합니다.

방법 1: Microsoft Excel 사용

Microsoft Excel에서 연결된 Excel 통합 문서를 열고 통합 문서를 변경합니다. 변경 내용을 완료하면 변경 내용을 저장한 다음 통합 문서를 닫습니다.

방법 2: Office Access 2007, Access 2003 또는 Access 2002 사용

연결된 Excel 통합 문서를 Access로 가져온 다음 데이터를 변경합니다. 변경 내용을 완료하면 데이터를 Excel .xls 파일로 내보냅니다.

Access에서 Excel로 테이블을 내보내려면 Access에서 다음 코드를 실행합니다.

Public Sub WorkArounds()
On Error GoTo Leave

Dim strSQL, SQL As String
    Dim Db As ADODB.Connection
    Set Db = New ADODB.Connection
    Db.CursorLocation = adUseClient
    Db.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=<AccessPath>"
    'Note: In Office Access 2007, use the following line of code:
    'Db.Open "PROVIDER=Microsoft.ACE.OLEDB.12.0;Data Source=<AccessPath>"
    SQL = "<MyQuery>"
    CopyRecordSetToXL SQL, Db
    Db.Close
    MsgBox "Access has successfully exported the data to excel file.", vbInformation, "Export Successful."
    Exit Sub
Leave:
        MsgBox Err.Description, vbCritical, "Error"
        Exit Sub
End Sub

Private Sub CopyRecordSetToXL(SQL As String, con As ADODB.Connection)
    Dim rs As New ADODB.Recordset
    Dim x
    Dim i As Integer, y As Integer
    Dim xlApp As Excel.Application
    Dim xlwbBook As Excel.Workbook, xlwbAddin As Excel.Workbook
    Dim xlwsSheet As Excel.Worksheet
    Dim rnData As Excel.Range
    Dim stFile As String, stAddin As String
    Dim rng As Range
    stFile = "<ExcelPath>"
    'Instantiate a new session with the COM-Object Excel.exe.
    Set xlApp = New Excel.Application
    Set xlwbBook = xlApp.Workbooks.Open(stFile)
    Set xlwsSheet = xlwbBook.Worksheets("<WorkSheets>")
    xlwsSheet.Activate
    'Getting the first cell to input the data.
    xlwsSheet.Cells.SpecialCells(xlCellTypeLastCell).Select
    y = xlApp.ActiveCell.Column - 1
    xlApp.ActiveCell.Offset(1, -y).Select
    x = xlwsSheet.Application.ActiveCell.Cells.Address
    'Opening the recordset based on the SQL query and saving the data in the Excel worksheet.
    rs.CursorLocation = adUseClient
    If rs.State = adStateOpen Then
        rs.Close
    End If
    rs.Open SQL, con
    If rs.RecordCount > 0 Then
        rs.MoveFirst
        x = Replace(x, "$", "")
        y = Mid(x, 2)
        Set rng = xlwsSheet.Range(x)
        xlwsSheet.Range(x).CopyFromRecordset rs
    End If
    xlwbBook.Close True
    xlApp.Quit
    Set xlwsSheet = Nothing
    Set xlwbBook = Nothing
    Set xlApp = Nothing

End Sub

참고

이 코드 예제에서 다음 자리 표시자를 바꿉 있습니다.

  • <AccessPath>

  • <ExcelPath>

  • <MyQuery>

    <MyQuery> 는 Access 데이터베이스의 테이블에 대해 실행하는 쿼리의 자리 표시자입니다. 쿼리 결과는 Excel 통합 문서로 내보내집니다.

  • <워크시트>

    <워크시트는> 결과를 내보낼 Excel 워크시트의 자리 표시자입니다. 이 코드 예제를 실행하려면 Ctrl+G를 눌러 직접 실행 창을 열고 해결 방법을 입력한 다음 Enter 키를 누릅니다.

추가 정보

법적 문제로 인해 Microsoft는 사용자가 Excel 통합 문서의 범위를 가리키는 연결된 테이블의 데이터를 변경할 수 있도록 하는 Access 2003 및 Access 2002의 기능을 사용하지 않도록 설정했습니다. 그러나 Excel 통합 문서에서 직접 변경하면 Access의 연결된 테이블에 변경 내용이 표시됩니다.