Dave,
ADO assumes the first row of the range is the field names. Try the following
command right after the "Set rs = dbConnection.Execute" line of code.
MsgBox rs.Fields(0).Name
Is this some of the missing data?
I assume you also noticed that the "GetRows" method transposes the data. The
columns become rows and rows become columns. You can use the UBound and
LBound functions to get the dimensions of the array. Depending upon what
version of Excel you have you can use the Application.Transpose function to
switch the data around if you need to.
Hope that helps...
Troy
"Dave B" wrote in message
...
Excel 2000
Hello,
I can't pull all the data I need because the ADO method looks for a header
and if one isn't available, it pulls a blank.
I know what rows I need so I make those the "SourceRange."
I need to get data from an extremely large Excel file (40,000 rows and
thru
HH in columns) without opening it - I'm trying to speed up the process.
Someone suggested I use ADO and now I'm slowly learning it. I am very
good
at spreadsheets and comfortable with slightly advanced vb.
Here's the code:
Private Function ReadDataFromWorkbook(SourceFile As String, SourceRange As
String) As Variant
Dim dbConnection As ADODB.Connection, rs As ADODB.Recordset
Dim dbConnectionString As String
dbConnectionString = "DRIVER={Microsoft Excel Driver
(*.xls)};ReadOnly=1;DBQ=" & SourceFile & ";HDR=false"
Set dbConnection = New ADODB.Connection
dbConnection.Open dbConnectionString ' open the database connection
Set rs = dbConnection.Execute("[" & SourceRange & "]") 'The source
range is say A22000:IV25000
ReadDataFromWorkbook = rs.GetRows ' returns a two dim array with all
records in rs
rs.Close
dbConnection.Close ' close the database connection
Set rs = Nothing
Set dbConnection = Nothing
On Error GoTo 0
Exit Function
InvalidInput:
MsgBox "The source file or source range is invalid!", vbExclamation,
"Get data from closed workbook"
Set rs = Nothing
Set dbConnection = Nothing
End Function