|
* 답변하시는 분들께 도움이 되도록 자신의 환경을 아래 항목 옆에 기재해 주세요.
- 액세스 버전(2007-2016):
* 아래줄에 질문을 작성하세요 >>
A라는 Table 안에 있는 레코드를 B라는 엑셀파일(.xlsx)로 옮기는 과정을 반복해야 합니다.
A 테이블에는 필요할 때마다 새로은 데이터가 추가되고 있고, 그 중 필요한 레코드를 선택하여, 선택된 레코드를 역시 필요할 때마다, B라는 엑셀파일로 내보내기 하는 과정이 반복되어야 합니다. 단, B라는 엑셀파일은 매번 새로 만들어지는 게 아니라 기존 레코드에 추가하여 붙여넣기 하는 방식으로 진행해야 합니다.
이런 과정을 vba로 코딩하여 만들고 싶은데 딱 맞는 사례를 못 찾고 있습니다. 어떻게 하면 찾을 수 있을까요?
==============[이형재님 글에 대한 답변입니다]==============
이렇게 말로만 설명해서 질문하시면 정확한 의도도 파악하기 힘들뿐더러, 답변자가 직접 파일을 만들어 봐야 하는 수고가 있기 때문에 답변을 얻기 힘듭니다.
다음은 AI가 만들어준 엑셀 내보내기 vba입니다.
파일이 없으면 새로만들고 있으면 기존파일을 오픈하여 기존내용 이후로 현재 내보내려는 내용을 추가합니다.
Dim xlApp As Object
Dim xlWB As Object
Dim xlSheet As Object
Dim filePath As String
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim lastRow As Long
Dim i As Integer
' 엑셀 파일 경로 설정
filePath = "파일경로"
' 엑셀 애플리케이션 객체 생성
On Error Resume Next
Set xlApp = CreateObject("Excel.Application")
' 파일이 존재하는지 확인
If Dir(filePath) = "" Then
' 파일이 없으면 새로 생성
Set xlWB = xlApp.Workbooks.Add
xlWB.SaveAs filePath
Else
' 파일이 있으면 열기
Set xlWB = xlApp.Workbooks.Open(filePath)
End If
' 첫 번째 시트 선택
Set xlSheet = xlWB.Sheets(1)
' 마지막 행 찾기
If xlSheet.Cells(1, 1).Value = "" Then
lastRow = 1
Else
lastRow = xlSheet.Cells(xlSheet.Rows.Count, 1).End(-4162).Row + 1
End If
' Access 데이터베이스와 Recordset 설정
Set db = CurrentDb
Set rs = db.OpenRecordset("쿼리명")
' 필드 이름 추가 (첫 번째 행)
If lastRow = 1 Then
For i = 0 To rs.Fields.Count - 1
xlSheet.Cells(lastRow, i + 1).Value = rs.Fields(i).Name
Next i
lastRow = lastRow + 1
End If
' 데이터 추가 (Recordset 내용 반복)
Do While Not rs.EOF
For i = 0 To rs.Fields.Count - 1
xlSheet.Cells(lastRow, i + 1).Value = rs.Fields(i).Value
Next i
lastRow = lastRow + 1
rs.MoveNext
Loop
' Recordset 닫기
rs.Close
Set rs = Nothing
Set db = Nothing
' 파일 저장 및 닫기
xlWB.Save
xlWB.Close
xlApp.Quit
' 메모리 해제
Set xlSheet = Nothing
Set xlWB = Nothing
Set xlApp = Nothing
MsgBox "데이터 내보내기가 완료되었습니다!" |
|