드로우홀릭 더베이직

조회폼의 결과를 엑셀로 출력할 수 있나요?

2017.11.16 16:03:10 조회 수 18433 추천 수 0

직장인을 위한 실무엑세스 p291의

조회폼으로 조회한 subA의 레코드를

그대로 엑셀로 내보낼수 있나요? 궁금합니다.



profile

돌직구

2017.11.17 08:58:24
*.149.161.117

네, 약간의 VBA코드가 필요하겠지만, 가능합니다.

완성된 예제파일을 첨부해 두었으니 참고 바랍니다.

조회 폼에서 '내보내기' 버튼을 클릭하면, 현재 조회된 데이터를 내보내기 할 것입니다.

현재 조회된 데이터는 suba.Form.RecordSource 속성값을 참조하면 알아낼 수 있지요.


이제 이것을 내보내기만 하면 됩니다.

내보내기를 할 때, 보통은 DoCmd.TransferSpreadSheet 함수를 사용하는데, 이것은 테이블의 데이터만 내보낼 수 있습니다. 따라서 이번 예제처럼, 가변젹인 데이터를 내보내는 데는 적합하지 않지요.

그래서 매 번 달라지는 이런 데이터는 DoCmd.OutputTo 함수를 사용하면 됩니다. 이 함수는 '쿼리'의 결과를 내보낼 수 있습니다.


문제는, 조회가 될 때 마다.. 쿼리를 새로 만들어줘야 한다는 것인데..

내보내기 전용 임시 쿼리를 만들고, 그 임시 쿼리를 그때그때 바꿔주는 방법을 사용하면 됩니다.


다음 소스코드를 살펴보시기 바랍니다.


Private Sub cmdExport_Click()

On Error GoTo Herror

    Const conQryName = "qtmpExport1"
    CurrentDb.QueryDefs(conQryName).SQL = subA.Form.RecordSource
    DoCmd.OutputTo acOutputQuery, conQryName, acFormatXLSX
    
    Exit Sub
    
Herror:
    Select Case Err.Number
        Case Else
            MsgBox Err.Description & vbNewLine & Err.Number, vbCritical + vbOKOnly
    End Select

End Sub

6행에서, 현재 조회된 데이터의 SQL 구문을 qtmpExport1 쿼리에 지정합니다. CurrentDb.QueryDefs(쿼리이름) 하게되면, 특정 쿼리를 가리킬 수 있습니다. CurrentDb.QueryDefs(쿼리이름).SQL 하게 되면, 이 쿼리의 내용을 완전히 바꿀 수 있죠.

7행에서, OutputTo 를 이용하여 변경한 쿼리를 엑셀로 내보냅니다.


두 줄 정도의 VBA 코드면 충분한데, 이 코드가 담고 있는 개념이나 생각들이 꽤 많아서, 다소 어려울 수 있겠네요.

필요하다면 여기에서 사용된 각종 용어(QueryDefs, RecordSource 등)를 도움말에서 찾아 보시기 바랍니다.

첨부

스피도프

2017.11.17 10:42:18
*.196.233.176

답변 감사합니다 말씀하신대로 하여 데이터를 출력을 할 수 있는 것을 확인했습니다.

그런데 몇가지만 더 질문 드리겠습니다.


데이터 레코드 수가 많아서 임시 테이블을 작성하고

CSV로 출력하는게 바람직하다고 생각합니다.


 위에서 가르쳐 주신 방법으로 작성된 쿼리에서  '디자인보기>테이블작성' 으로 테이블을 작성했구요

 텍스트파일 내보내기 창을  띄워서 CSV파일을 작성했습니다.


그래서 두가지만 질문 드리겠습니다.

1. 위의 방법에서 subA의 내용을 바탕으로 임시로 작성된 쿼리를 VBA 명령으로 '테이블 만들기'를 실행하여

   임시데이터 테이블을 작성할 수 있나요?

2. 임시로 작성된 데이터 테이블에 대해 '텍스트파일 내보내기' 창을 VBA로 명령해서 실행 시킬수 있나요?


profile

돌직구

2017.11.28 21:29:06
*.149.161.117

레코드 수가 많아서 임시 테이블을 작성한다는 것이, 꼭 필요한 것인지 모르겠습니다.

바로 CSV로 내보내든, 테이블을 만들고 내보내든, 해당 연산은 필요한 것이니까요.

오히려 임시 테이블을 만들고 내보내면, 두 번 작업하는 것일 수도 있으니까요.


위 예제에서 'DoCmd.OutputTo acOutputQuery, conQryName, acFormatXLSX' 라는 구문이 있는데, 이것을..

'DoCmd.OutputTo acOutputQuery, conQryName, acFormatTXT' 로 바꿔주면 CSV로 바로 내보내 줍니다.


OutputTo 함수는 레코드 개수 제한이 있으니, 내보낸 다음 제대로 내보냈나 확인하시는 것이 좋겠습니다.




그리고, 어쨌든 질문 주신 것에 대해 답을 드리자면..

1. 임시 데이터 테이블을 만들 때는 다음과 같은 구문을 사용하면 됩니다.

보통 쿼리가 'SELECT [필드명1], [필드명2], ... , [필드명n] FROM [테이블명] 이렇게 됩니다.

이런 쿼리는 데이터를 '추출'하는 쿼리이죠.

그런데, 'SELECT [필드명1], [필드명2], ... , [필드명n] INTO [내보낼_테이블명] FROM [테이블명]' 과 같이 'INTO' 구문을 사용해 주면 임시 테이블로 쿼리 결과를 보내줍니다. '테이블 만들기 쿼리' 이죠.


2. 테이블에 대해서는 DoCmd.TransferText 명령을 이용하면 텍스트 파일로 내보내 줍니다. OutputTo 함수와 TransferText 함수 모두 내보내는 행 수에 제한이 있는 것으로 알고 있는데, TransferText 함수가 더 많은 데이터를 내보낼 수 있습니다.


이런 것을 적용한 예제를 첨부하니, 자세한 것은 소스코드를 살펴보시기 바랍니다.

첨부
List of Articles
번호 제목 글쓴이 날짜 조회 수
공지 FAQ: 어떤 과정을 수강하는 것이 좋을까요? 외 돌직구 2017-08-29 31036
공지 좋은 답변을 이끌어 내는 방법 [1] 돌직구 2017-07-14 27361
공지 액세스 Q/A 게시판 형식을 변경합니다. 돌직구 2014-09-10 22906
236 vba에서 날짜 포멧 변환 질문드립니다. 1 1 쐬주도사 2017-12-18 26214
235 저장폼 관련 문의 드립니다 vba 1 Ssari 2017-12-18 1816
234 고유속성에서 예/아니오 선택 메뉴가 없는 이유에 대해 file 2 kame7788 2017-12-17 2097
233 목록상자 클릭시 클릭한 COL, ROW의 값 vb로 받아오기 2 쐬주도사 2017-12-15 26392
232 테이블형식이나 데이터시트 형식에서의 반복색상관련 file 2 수민아빠 2017-12-13 2480
231 학습 커리큐럼 문의 1 빅데이터 2017-12-13 1815
230 폼에 넣은 하위폼의 변경 file 1 하이누스 2017-12-06 2678
229 실무액세스2 질문드려요. file 1 열공액세스 2017-12-04 2110
228 로그인 암호기반 만들기 극대화 2017-11-28 1714
227 외부데이터-저장된 데이터 내보내기 1 활명수 2017-11-23 1829
226 ADP 온라인 과정 개설 계획 문의 1 빨강마티즈 2017-11-22 3129
» 조회폼의 결과를 엑셀로 출력할 수 있나요? 3 스피도프 2017-11-16 18433
224 자동 내보내기 기능에 대하여 1 그루터기 2017-11-16 2123
223 거래처명 정렬하는 방법 문의 2 열공액세스 2017-11-10 2090
222 [엑세스]엑셀 업로드 폼 만들기 질문드립니다. file 1 스피도프 2017-11-07 2605
221 서식있는 텍스트 문의~! file 1 열공액세스 2017-10-20 2509
220 ID와 암호 기반의 로그인 기능 1 그러므로호프 2017-10-16 1689
219 날짜 입력 오류 file 2 공원벤치 2017-10-09 12649
218 액세스문의 file 1 다이아몬드 2017-10-06 2000
217 2013 구입 후 중급 강의 들으려고 하는데요 1 엄마 2017-09-30 2377


  주소  12925 경기도 하남시 미사대로 540, B동 917호 (현대지식산업센터 한강미사2차) ㈜팀데이터이십일  |  고객센터 전화번호  02-467-2998  |  대표이사  염기웅
개인정보관리책임자  염기웅 (ml_privacy@td21.com)  |  사업자등록번호  120-86-79260  |  통신판매업신고번호  제 2021-경기하남-1166 호  [사업자 정보 확인]
  TD21의 사전 서면 동의 없이 TD21 사이트 일체의 정보, 콘텐츠 및 UI 등을 상업적 목적으로 전시, 전송, 스크래핑 등 무단 사용할 수 없습니다.