2013-04-18 4 views
1

soome condtion을 기반으로 검색된 특정 레코드 세트의 행 번호를 가져 오려고합니다. ADO를 사용하여 Excel의 행 번호 가져 오기

Name Id 
abc  1 
cde  2 
efg  3 

이제 직원 "CDE"의 행 번호 또는 레코드 번호를 얻는 방법을 (우리는이 같은 결과를 얻을 필요가 코드 아래에 accrding) 테이블

아래 고려하십시오. 이것 좀 도와 줘.

Const adOpenStatic = 3 
Const adLockOptimistic = 3 
Const adCmdText = &H0001 
strSource="C:\Test.xls" 
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strSource   & ";Extended Properties=""Excel 8.0;HDR=Yes;"";" 
Set conn = CreateObject("ADODB.Connection") 
Set objRecordSet = CreateObject("ADODB.Recordset") 
conn.Open strConnection 
objRecordset.Open "Select Name FROM [sheet1$] Where Id = 2", conn, adOpenStatic,  adLockOptimistic, adCmdText 
msgbox objRecordset.GetString 
conn.Close 
Set conn = Nothing 
+0

이 같은 것을보십시오 :'을 Debug.Print UBound 함수 (objRecordset.GetRows, 2) + 1' 당신에게 수를 제공하는 레코드 집합의 모든 행 전에 넣어 :'msgbox objRecordset.GetString' –

+0

레코드 집합에서 배열의 모든 레코드를 가져 와서 루프 번호를 얻기 위해 루프를 통과시킬 수 없습니까? 그 테이블이 얼마나 큽니까? – shahkalpesh

답변

1

최선의 방법은 행 번호와 동일한 데이터가 엑셀에서 열을 넣는 것이다. 그런 다음 해당 열을 쿼리하십시오. 그것은 완전한 해결책입니다. 당신이 할 수없는 경우

그러나 어떤 이유로,이 시도 :

Const adOpenStatic = 3 
Const adLockOptimistic = 3 
Const adCmdText = &H1 
Dim RowNumber 
Dim SqlStmt 

strSource = "C:\Temp\Test.xls" 
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & strSource & ";Extended Properties=""Excel 8.0;HDR=Yes;"";" 
Set conn = CreateObject("ADODB.Connection") 
Set objRecordset = CreateObject("ADODB.Recordset") 
conn.Open strConnection 

SqlStmt = "Select Name, Id FROM [sheet1$]"  ''-- you can optimize this query if your Id is in ascending order. e.g. "Select Name, Id FROM [sheet1$] Where Id <= 4" 
objRecordset.Open SqlStmt, conn, adOpenStatic, adLockOptimistic, adCmdText 
objRecordset.Find "Id = 4" 
RowNumber = objRecordset!ID + 1 ''-- +1 for Header row. 
conn.Close 
Set conn = Nothing 

MsgBox RowNumber