드로우홀릭 더베이직

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

2017.11.16 16:03:10 조회 수 19477 추천 수 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
번호 제목 글쓴이 날짜 조회 수sort
공지 FAQ: 어떤 과정을 수강하는 것이 좋을까요? 외 돌직구 2017-08-29 31954
공지 좋은 답변을 이끌어 내는 방법 [1] 돌직구 2017-07-14 28104
공지 액세스 Q/A 게시판 형식을 변경합니다. 돌직구 2014-09-10 23152
520 특정 테이블의 필드 값을 다른 테이블로 옮기는 작업 1 1 thedream77 2014-12-18 45949
519 하나의 폼에서 데이터 입력 및 조회 구현 file 1 park 2018-08-22 45659
518 한 필드에서 여러개의 같은 데이터중 한개의 데이터만 가져오는 방법 2 백두산 2020-06-05 43200
517 추가쿼리에서 키위반 오류 문의드립니다 file 3 1 박형근 2022-07-17 36427
516 엑세스로 재고관리대장을 만들계획입니다. 2 1 똥구녕멍멍 2019-04-18 32641
515 외부데이터 "가져오기 오류 - 형식변환실패"의 의미는~? file 1 1 방랑김사깟 2017-02-19 32302
514 액셀의 데이타(하이퍼링크)를 복사해서 기존의 액세스 테이블에 붙이기 file 3 1 광야에서살아남기 2015-08-21 31389
513 이벤트 에러 file 4 1 엑세스29 2017-06-15 29777
512 엑세스 데이터베이스 일관성 에러 문의 1 박상순 2021-02-22 28723
511 목록상자 클릭시 클릭한 COL, ROW의 값 vb로 받아오기 2 쐬주도사 2017-12-15 28349
510 메시지박스의 체크박스로 테이블의 체크박스 컨트롤하기 1 공잇 2016-04-07 28060
509 엑셀파일 불러오기 오류 문의 file 3 기영주 2016-02-16 27760
508 vba에서 날짜 포멧 변환 질문드립니다. 1 1 쐬주도사 2017-12-18 27255
507 액세스 데이터베이스 딜레이 및 멈춤 문제 file 1 3 전맥 2016-10-11 26763
506 리스트박스의 선택된값을 해제 하려면 어떻게해야하나요, 1 김은교 2016-01-16 26185
505 통화 필드에 단위($ 또는 \)표시가 저장 안 되게 할 수 있을까요? 3 클로이 2019-07-04 26118
504 입력식에 유호하지 않는 날짜값이 있습니다. 2 sky3300 2019-03-26 25246
503 액세스 DB 파일 용량 문제 문의 드립니다. 4 바남풍 2019-08-26 25025
502 사진이나 그림 삽입 방법 1 notebook01 2016-05-01 25019
501 텍스트 가져오는 데 문제가 생겨요. 1 당연히나지 2021-01-24 24471


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