드로우홀릭 더베이직

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

2017.11.16 16:03:10 조회 수 19456 추천 수 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 31948
공지 좋은 답변을 이끌어 내는 방법 [1] 돌직구 2017-07-14 28090
공지 액세스 Q/A 게시판 형식을 변경합니다. 돌직구 2014-09-10 23143
400 실무액세스 검색폼 모듈을 수정했는데 잘 안되네요. file 4 클로이 2020-08-11 597
399 실무액세스 교재 272쪽 내용(?)을 부탁드립니다. 2 클로이 2020-08-07 403
398 코딩한 내용이 작동이 안됩니다. file 4 학이시습 2020-08-05 236
397 InputBox, MsgBox 함수 원형표시 차이 1 학이시습 2020-08-04 818
396 액세스 문의 입니다 (디자인보기 복사) 1 김상탁 2020-08-03 7347
395 엑세스 초보 질문입니다. 1 토니수사 2020-07-20 517
394 [직장인을 위한 실무 액세스] p.264 조회기능 넣기 '개체가 필요합니다' 오류 1 access어린이 2020-07-15 1184
393 '금액'계산 필드 만들기(322페이지) 질문입니다. file 2 학이시습 2020-07-11 381
392 보고서 인쇄 시 사진 누락 file 1 ming 2020-06-23 289
391 무따2013 신용카드 폼 만들기 [조회수정] 필드에 대한 질문입니다. 1 클로이 2020-06-13 296
390 하나의 폼에 두개의 쿼리에서 갑을 찾아오는 방법 2 백두산 2020-06-11 7479
389 한 필드에서 여러개의 같은 데이터중 한개의 데이터만 가져오는 방법 2 백두산 2020-06-05 43177
388 액세스 업데이트 쿼리 질문!! 2 dhgo 2020-06-04 11244
387 액세스 쿼리에서 질문 1 dhgo 2020-06-03 1114
386 구문해석 5 백두산 2020-05-26 1314
385 직장인을 위한 실무 엑세서 - 조회 폼 질문 1 미르 2020-05-21 2290
384 시간대별로 다른 task 할당받은 직원들의 당일일정표 보여주기 2 클로이 2020-05-10 306
383 매크로가 안됩니다. file 1 학이시습 2020-05-07 289
382 데이터 나누기 11 백두산 2020-05-06 649
381 두 데이타 합치기 질문입니다 1 백두산 2020-04-29 741


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