VBA를 사용하여 텍스트 파일의 데이터 하위 집합을 제공하기 위해 Excel 쿼리 테이블을 만들려고합니다. Jet OLEDB 연결 문자열을 쿼리 테이블 Connection
으로 사용하고 싶습니다. 왜 이것이 실패할까요?텍스트 파일 원본의 Excel QueryTable이 Jet OLEDB에서 실패 함 연결 문자열
다음은 절차입니다. 내가 ADO 레코드를 만든 다음 쿼리 테이블 Connection
로 그 레코드를 사용하도록 사용하는 경우
Sub OledbTest1() 'FAILS.
'Create querytable with oledb connect string.
Const strConn = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Users\RSJCB\Desktop\;" & _
"Extended Properties=""text;HDR=Yes;FMT=Delimited"""
Dim wsht As Worksheet
Set wsht = ThisWorkbook.Worksheets.Add()
With wsht
'The next line errors with 1004: Application-defined of object-defined error
.QueryTables.Add strConn, .Range("A1"), "SELECT TOP 10 * FROM [TestFile.csv]"
.QueryTables(1).Refresh
End With
Set wsht = Nothing
End Sub
연결 문자열은 작동합니다. 내가 쿼리 테이블 Connection
로 마이크로 소프트 텍스트 ODBC 드라이버 연결 문자열을 사용하는 경우
Sub OledbTest2() 'SUCCEEDS.
'Create querytable with ado recordset opened using oledb connect string.
Const strConn = _
"Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Users\RSJCB\Desktop\;" & _
"Extended Properties=""text;HDR=Yes;FMT=Delimited"""
Const strSql = "SELECT TOP 10 * FROM [TestFile.csv]"
Dim wsht As Worksheet
Dim rst As New ADODB.Recordset
rst.Open strSql, strConn
Set wsht = ThisWorkbook.Worksheets.Add()
With wsht
'The next line errors with 1004: Application-defined of object-defined error
.QueryTables.Add rst, .Range("A1")
.QueryTables(1).Refresh
End With
Set wsht = Nothing
Set rst = Nothing
End Sub
는 또한 작동합니다. 그러나 이것은 약간 느리게 작동하는 것으로 보이며 실제 코드에서 700K 레코드를 읽습니다. 또한 OLEDB를 쿼리 테이블에 연결할 수 없었으며이를 수행하는 방법을 알고 싶습니다.
Sub OdbcTestQtbl() 'SUCCEEDS.
'Create querytable with odbc connect string.
Const strConn = _
"Driver={Microsoft Text Driver (*.txt; *.csv)};" & _
"Dbq=C:\Users\RSJCB\Desktop\;" & _
"Extensions=asc,csv,tab,txt;"
Dim wsht As Worksheet
Set wsht = ThisWorkbook.Worksheets.Add()
With wsht
.QueryTables.Add "ODBC;" & strConn, .Range("A1"), "SELECT TOP 10 * FROM [TestFile.csv]"
.QueryTables(1).Refresh
End With
Set wsht = Nothing
End Sub
대단히 감사합니다.
그래, 작동합니다. 나는 그것을 시도하지 않았다는 것을 믿을 수 없다. [documentation] (https://msdn.microsoft.com/en-us/library/office/ff837764.aspx)은 "ODBC;"에 대한 요구 사항을 지정합니다. ODBC 연결 문자열의 시작 부분에 있지만 OLEDB에 대해서는 지정하지 않습니다. 고마워요! – JBStovers
@JBS 돌입 - 솔직히 말해서 어둠 속에서 "이것이 효과가 있을지 궁금하다." – Comintern