VB(A)

[ADO] 기간 설정하여 검색하기

당근쨈 2016. 11. 18. 15:54

http://cafe.naver.com/excelmaster/132638


시트1에 DB가 있고

시트2에서 기간 및 출발동 조건을 주어 검색버튼을 누르면

조건에 해당하는 결과값을 출력해주는 SQL


+ 결과 출력 시트 +


+ DB 시트 +



Option Explicit
 
Sub Macro()
 
    Dim ADO_Connect As New ADODB.Connection
    Dim ADO_Record As New ADODB.Recordset
    Dim sql As String
    Dim ExcelVersion As Integer
    Dim OLEDB_Connect As String
    Dim FirstDay As Date
    Dim LastDay As Date
    Dim StartDong As String
    
    '파일 버전을 확인하여 OLEDB를 사용할 버전을 정합니다.
    'ADO에 기본으로 들어가는 내용입니다.
    Select Case Application.Version
        Case Is <= 11: ExcelVersion = 8
        Case Is >= 12: ExcelVersion = 12
        Case Else
            MsgBox "엑셀 버전을 확인해주세요"
            Exit Sub
    End Select
    
    OLEDB_Connect = "Provider=Microsoft.Ace.OLEDB.12.0;" & _
            "Data Source='" & ThisWorkbook.FullName & "';" & _
            "Extended Properties =""Excel " & ExcelVersion & ".0 xml; HDR = YES"";"
            
    '기존자료 삭제 및 변수설정
    Range("A8").CurrentRegion.Offset(1).ClearContents
    FirstDay = Range("B3")
    LastDay = Range("D3")
    StartDong = Range("B4")
    
    'SQL을 지정합니다.
    sql = "select 접수일자, 출발동, 도착동, 총금액, 세금계산서 from [Sheet1$] " '시트1에서 원하는 자료만 가져옵니다.
    sql = sql & "where 출발동=""" & StartDong & """"    '출발동을 지정합니다.
    sql = sql & " and 접수일자 between #" & FirstDay & "# and #" & LastDay & "#"    '검색 날짜를 지정합니다.
    
    'ADO 및 레코드셋에 ADO_Connect
    ADO_Connect.Open OLEDB_Connect
    ADO_Record.Open sql, ADO_Connect, 331
    
    'A9셀에 검색 결과를 출력합니다. 검색결과가 없으면 공란을 출력합니다.
    Range("A9").CopyFromRecordset ADO_Record
 
    '변수 초기화
    ADO_Record.Close
    ADO_Connect.Close
    
    Set ADO_Record = Nothing
    Set ADO_Connect = Nothing
    
End Sub
 
 
 
 
cs


test.xlsm