2011-02-25 4 views
0

Excel VBA 코드 또는 매크로에서 ms 액세스 db에서 쿼리를 실행하는 방법. MS-Access 쿼리는 Excel에서 전달해야하는 일부 매개 변수를 허용합니다.excel에서 액세스 쿼리를 실행하고 paramerts를 쿼리에 전달하십시오.

Dim cn As Object 
Dim strFile As String 
Dim strCon As String 
Dim strSQL As String 

strFile = "C:\docs\Test.mdb" 

strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strFile 

''Late binding, so no reference is needed 
Set cn = CreateObject("ADODB.Connection") 

cn.Open strCon 

strSQL = "INSERT INTO ATable (AField) " _ 
& "VALUES (" & Sheet1.[A1] & ")" 

cn.Execute strSQL 

cn.Close 
Set cn = Nothing 

또한 엑셀에서 데이터 집합에 SQL에서 인라인을 참조 할 수 있습니다 : 감사

답변

4

여기에 하나의 가능성이다.

EDIT 다시는 명령을 사용하여

논평 :

strSQL = "SELECT * FROM ATable " _ 
& "WHERE AField = @AField" 

With cmd 
    Set .ActiveConnection = cn 
    .CommandText = strSQL 
    .CommandType = 1 'adCmdText 

    ''ADO Datatypes are often very particular 
    ''adSmallInt = 2 ; adParamInput = 1 
    .Parameters.Append .CreateParameter("@AField", 2, 1, , Sheet1.[A1]) 

End With 
Set rs = cmd.Execute 

은 참조 : http://support.microsoft.com/kb/181782

+0

그는 Remou, 답장을 보내 주셔서 감사합니다. ms 액세스 쿼리를 실행하고 결과를 얻어야합니다. 샘플은 db에 연결하고 데이터를 저장하기위한 입력을 제공합니다. 감사. – dps123

+0

감사합니다 Remou,이 도움이 .. – dps123

1

이것은 ADODB를 사용합니다.

Set m_Connection = New Connection 

If Application.Version = "12.0" Then 
    m_Connection.Provider = "Microsoft.ACE.OLEDB.12.0" 
Else 
    m_Connection.Provider = "Microsoft.Jet.OLEDB.4.0" 
End If 

m_Connection.Open <full path to Access DB> 
If m_Connection.State > 0 Then 

    Dim rsSource As New Recordset 
    rsSource.Open strQuery, m_Connection, adOpenForwardOnly, adLockReadOnly 

    Dim result As Long 
    Dim rngTarget As Range 
    rngTarget = ThisWorkbook.Worksheets(m_SheetName).Range("A1") 

    If Not rsSource.BOF Then 
     result = rngTarget.CopyFromRecordset(rsSource) 
    End If 

    If rsSource.State Then rsSource.Close 
    Set rsSource = Nothing 

End If 

그래서 쿼리를 실행하고 원하는 곳에 배치합니다. strQuery는 db 또는 SQL 문자열의 쿼리 이름입니다.

관련 문제