2012-11-16 3 views
2

SQL 테이블의 데이터를 Excel로 가져 오려고합니다. 필자는 데이터 소스 도구를 사용하여 매크로를 기록했습니다. 그러나 내가 끌어 당기는 데이터의 양은 일반적으로 충돌이 우수합니다. 내 VBA 스크립트에서 SQL 테이블에서 가져온 데이터를 제한하는 변수를 추가하는 방법이 있습니까? 기본적으로 sql의 select 문에 where 절을 추가합니다.vba를 사용하여 Excel 데이터를 Excel로 가져 오기

감사합니다.

- 션

With ActiveSheet.ListObjects.Add(SourceType:=0, Source:=Array(_ 
    "OLEDB;Provider=SQLOLEDB.1;Integrated Security=SSPI;Persist Security Info=True;Data Source=10.22.30.215;Use Procedure for Prepare=1;Aut" _ 
    , _ 
    "o Translate=True;Packet Size=4096;Workstation ID="FakeName";Use Encryption for Data=False;Tag with column collation when possible=Fa" _ 
    , "lse;Initial Catalog=FakeCatelog"), Destination:=Range("$A$1")). _ 
    QueryTable 
    .CommandType = xlCmdTable 
    .CommandText = Array(_ 
    """FakeName""") 
    .RowNumbers = False 
    .FillAdjacentFormulas = False 
    .PreserveFormatting = True 
    .RefreshOnFileOpen = False 
    .BackgroundQuery = True 
    .RefreshStyle = xlInsertDeleteCells 
    .SavePassword = False 
    .SaveData = True 
    .AdjustColumnWidth = True 
    .RefreshPeriod = 0 
    .PreserveColumnInfo = True 
    .SourceConnectionFile = _ 
    "C:\UFakeFilePathodc" 
    .ListObject.DisplayName = "FakeName" 
    .Refresh BackgroundQuery:=False 
End With 
End Sub` 

답변

3

데이터베이스에 연결하고하고 쿼리를 대신하여 시트에 전체 데이터베이스를 내려고 시도하십시오. 이것은 당신이 시작할 수 있어야합니다
은 "추가 확인 참조"Microsoft ActiveX 데이터를 6.0 라이브러리 개체 "또는 한 번이 줄을 실행하면 코드에 만족하면
ActiveWorkbook.VBProject.References.AddFromGuid "{B691E011-1797-432E-907A-4D8C69339129}", 6, 0

Sub QueryDB() 
    Dim dbName As ADODB.Connection 
    Dim dbResults As ADODB.Recordset 
    Set dbName = openDBConn("YOURDATABASE", "YourTable") 
    Set dbResults = dbName.Execute("SELECT * FROM YOURDATABASE") 
    While Not dbResults.EOF 
     'Do Something' 
     dbResults.MoveNext 
    Wend 
End Sub 

Function openDBConn(dataSource As String, table As String) As ADODB.Connection 
    Dim newDBConn As ADODB.Connection 
    Set newDBConn = New ADODB.Connection 
    newDBConn.CommandTimeout = 60 
    Dim strConn As String 
    strConn = "PROVIDER=SQLOLEDB;DATA SOURCE=" & dataSource & ";INITIAL CATALOG=" & table & ";INTEGRATED SECURITY=SSPI" 
    newDBConn.Open strConn 
    Set openDBConn = newDBConn 
End Function 
+0

+1 테이블 풀이가 아닌 쿼리가 필요합니다. – nutsch

+0

+1 ... 참조를 추가하는 것을 잊지 마세요 – whytheq

+0

Thanks @whytheq - 참조에 대한 지침은 –

1

것은 그것이 가치가있을 수도 있습니다 late binding로 전환. Early binding 응용 프로그램을 개발할 때 전체 인텔리를 먹을수록 좋다하지만 난 시간이 지남에와 응용 프로그램이 새 버전으로 업그레이드받을으로 좀 덜 귀찮은 늦게 바인딩을 찾을 수 있습니다. 또한

내가 연결을 사용할 때 문자열 꽤 많이 그것은 근사한 수 있습니다. e 모듈의 상단에서 데칼을 제거하면 나중에이 하드 코드를 파헤쳐 버릴 수 있습니다.

(p. 이것은 몇 가지 변경 사항이있는 Kevin의 코드입니다.

관련 문제