2016-11-26 11 views
0

VBA에 초보자이므로 질문이 낮은 경우 문제가되지 않습니다. 데이터가 있어야하는 SQL 쿼리를 실행하려고합니다. 같은 통합 문서의 시트 중 하나에서 추출 할 수 있습니다. 내가 데이터 시트에서 숫자를 얻을 후 VBA ADODB - 데이터베이스와 같은 통합 문서의 Excel 시트를 사용하여 쿼리 선택

enter image description here

SQL = "Select ProductNumber from [sData$] where ProductSource = " & pSource & " 

'pSource is a string that stores Product Source 
'sdata is a sheet named as Data in the workbook 

dataPath = ThisWorkbook.Fullname 

'Not sure if this is the value I shall send as datapath in getData function 

Set rst = getData(dataPath,SQL) 
rst.Open 

GetData의 기능이

지금

Public funtion getData(path as String, SQL as string) as ADODB.Recordset 
Dim rs as ADODB.Recordset 
Set cn = New ADODB.Connection 
Set rs = New ADODB.Recordset 
cn.Open ("Provider= Microsoft.Jet.OLEDB.4.0;" & _ 
      "DataSource= " & path & ";"&_ 
      "Extended Properties=""Excel 8.0;HDR=Yes;FMT=Delimited;IMEX=1;""") 
rs.ActiveConnection =cn 
rs.Source= SQL 
Set getData =rs 
End Function 

다음과 같이 정의, 나는 관계 시트에서 해당 ProductCompany을 찾을 필요가있다. 9은 Amul을위한 것이고, 5는 Nestle을위한 것입니다.

관계 :

enter image description here

그 작업을 수행하는 방법에 없습니다 확신합니다. 번호는 해당 제품 회사와 순서대로 일치합니다.

+0

쿼리 결과를 배열에 저장하고 루프를 통해 배열 한 다음 배열의 데이터를 기반으로 JOIN 문을 실행합니다. –

+0

Hi Doug Coats :) 내 쿼리가 결과를 얻지 못하고 있습니다. 나는 내 코드에서 무엇이 잘못되었는지 모른다. 내 코드를 검사하고 무엇이 잘못되었는지 말해 줄 수 있습니까? 다음 결과 집합을 배열에 저장하고 논리를 반복하면서 코드를 도울 수 있습니까? 나는 그것에 대해 정말로 분명하지 않다. 나는 논리를 얻지 만 vba에서 그것을 수행한다. 시트 사이를 뒤집는 것이 나를 혼란스럽게 만드는 것이다. – Naina

+0

은 sheetn 이름의 Data 또는 sData입니까? –

답변

0

이 통합 문서에 ADODB 연결을 만들고, SQL 쿼리에서 ADODB 레코드 세트를 가져오고, 관계 시트에서 키 - 값 쌍을 검색하고, 사전을 만들고 채우고, 레코드 세트의 값을 출력하는 방법을 보여주는 아래 예제를 살펴보십시오 상기 사전에서 해당 값 :

Option Explicit 

Sub Test() 

    Dim oCn As Object 
    Dim oRs As Object 
    Dim aKeys 
    Dim aItems 
    Dim i As Long 
    Dim oDict As Object 
    Dim dProdNum 

    ' create ADODB connection to this workbook 
    Set oCn = CreateObject("ADODB.Connection") 
    oCn.Open _ 
     "Provider=Microsoft.Jet.OLEDB.4.0;" & _ 
     "DataSource='" & ThisWorkbook.FullName & "';" & _ 
     "Extended Properties=""Excel 8.0;HDR=Yes;FMT=Delimited;IMEX=1;"";" 
    ' get ADODB recordset from SQL query 
    Set oRs = oCn.Execute("SELECT DISTINCT ProductNumber FROM [Data$] WHERE ProductSource = 'A1'") 

    ' retrieve key - value pairs from relation sheet 
    With ThisWorkbook.Sheets("Relation") 
     aKeys = Split(.Range("B1"), ",") 
     aItems = Split(.Range("B2"), ",") 
    End With 
    ' create and populate a dictionary 
    Set oDict = CreateObject("Scripting.Dictionary") 
    For i = 0 To UBound(aKeys) 
     oDict(Trim(aKeys(i)) + 0) = Trim(aItems(i)) 
    Next 

    ' output the values from the recordset and the corresponding values from the dictionary 
    oRs.MoveFirst 
    Do Until oRs.EOF 
     dProdNum = oRs.Fields(0).Value 
     Debug.Print dProdNum & " - " & oDict(dProdNum) 
     oRs.MoveNext 
    Loop 

End Sub 

가 다음 날의 출력은 :로

4 - Britanica
5 - 네슬레
- 9

,369 Amul을

위의 코드에서 연결 문자열은 .xls 파일로 표시됩니다. .xlsm의 경우 다음을 사용해야합니다.