Copying the first row of wbooks with ADO

G

Geoff

Hi
I would like to copy the first row of data from a number of wbooks using ADO
but for now the code below is just for 1 source wbook to the Log file.
It copies row 1 data from Test1.xls in the "C" directory to wherever Log.xls
is installed. The code works fine providing there is data in cell A1. But
if the first cell containing data in the source file (test1) is say C1, then
data is still copied into the Log file starting at A1 whereas it ought to be
C1. Empty columns elsewhere in the source file row1 are copied correctly
How can I rectify this?
Is my approach the best way to go about the process for multiple wbooks?

T.I.A.

Geoff

Option Explicit
Option Private Module

Sub Test2()
GetData "C:\Test1.xls", "Sheet1", "A1:IV1"
End Sub

Function GetData(SourceFile As Variant, SourceSheet As String, sourceRange
As _ String)
Dim rs As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No"";"
szSQL = "SELECT * FROM [Sheet1$];"
Set rs = New ADODB.Recordset
rs.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
Workbooks("Log.xls").Sheets(1).Cells(1, 1).CopyFromRecordset rs, 1, _
rs.Fields.Count
rs.Close
Set rs = Nothing
End Function
 
G

Geoff

Thank you for the quick response but that's a lot of code to go through
immediately and establish if it answers my question which is what happens if
the first column of source data is empty? Multiple workbooks comes after
I've settled this matter.

Geoff

Ron de Bruin said:
Try the examples for more workbooks on this page
http://www.rondebruin.nl/ado.htm

--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Geoff said:
Hi
I would like to copy the first row of data from a number of wbooks using ADO
but for now the code below is just for 1 source wbook to the Log file.
It copies row 1 data from Test1.xls in the "C" directory to wherever Log.xls
is installed. The code works fine providing there is data in cell A1. But
if the first cell containing data in the source file (test1) is say C1, then
data is still copied into the Log file starting at A1 whereas it ought to be
C1. Empty columns elsewhere in the source file row1 are copied correctly
How can I rectify this?
Is my approach the best way to go about the process for multiple wbooks?

T.I.A.

Geoff

Option Explicit
Option Private Module

Sub Test2()
GetData "C:\Test1.xls", "Sheet1", "A1:IV1"
End Sub

Function GetData(SourceFile As Variant, SourceSheet As String, sourceRange
As _ String)
Dim rs As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No"";"
szSQL = "SELECT * FROM [Sheet1$];"
Set rs = New ADODB.Recordset
rs.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
Workbooks("Log.xls").Sheets(1).Cells(1, 1).CopyFromRecordset rs, 1, _
rs.Fields.Count
rs.Close
Set rs = Nothing
End Function
 
R

Ron de Bruin

Use the code in the links on top of the page
You have much more control then and it is always working correct.


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Geoff said:
Thank you for the quick response but that's a lot of code to go through
immediately and establish if it answers my question which is what happens if
the first column of source data is empty? Multiple workbooks comes after
I've settled this matter.

Geoff

Ron de Bruin said:
Try the examples for more workbooks on this page
http://www.rondebruin.nl/ado.htm

--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Geoff said:
Hi
I would like to copy the first row of data from a number of wbooks using ADO
but for now the code below is just for 1 source wbook to the Log file.
It copies row 1 data from Test1.xls in the "C" directory to wherever Log.xls
is installed. The code works fine providing there is data in cell A1. But
if the first cell containing data in the source file (test1) is say C1, then
data is still copied into the Log file starting at A1 whereas it ought to be
C1. Empty columns elsewhere in the source file row1 are copied correctly
How can I rectify this?
Is my approach the best way to go about the process for multiple wbooks?

T.I.A.

Geoff

Option Explicit
Option Private Module

Sub Test2()
GetData "C:\Test1.xls", "Sheet1", "A1:IV1"
End Sub

Function GetData(SourceFile As Variant, SourceSheet As String, sourceRange
As _ String)
Dim rs As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No"";"
szSQL = "SELECT * FROM [Sheet1$];"
Set rs = New ADODB.Recordset
rs.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
Workbooks("Log.xls").Sheets(1).Cells(1, 1).CopyFromRecordset rs, 1, _
rs.Fields.Count
rs.Close
Set rs = Nothing
End Function
 
G

Geoff

Ok, I'll start testing. Thank you.

Geoff

Ron de Bruin said:
Use the code in the links on top of the page
You have much more control then and it is always working correct.


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Geoff said:
Thank you for the quick response but that's a lot of code to go through
immediately and establish if it answers my question which is what happens if
the first column of source data is empty? Multiple workbooks comes after
I've settled this matter.

Geoff

Ron de Bruin said:
Try the examples for more workbooks on this page
http://www.rondebruin.nl/ado.htm

--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Hi
I would like to copy the first row of data from a number of wbooks using ADO
but for now the code below is just for 1 source wbook to the Log file.
It copies row 1 data from Test1.xls in the "C" directory to wherever Log.xls
is installed. The code works fine providing there is data in cell A1. But
if the first cell containing data in the source file (test1) is say C1, then
data is still copied into the Log file starting at A1 whereas it ought to be
C1. Empty columns elsewhere in the source file row1 are copied correctly
How can I rectify this?
Is my approach the best way to go about the process for multiple wbooks?

T.I.A.

Geoff

Option Explicit
Option Private Module

Sub Test2()
GetData "C:\Test1.xls", "Sheet1", "A1:IV1"
End Sub

Function GetData(SourceFile As Variant, SourceSheet As String, sourceRange
As _ String)
Dim rs As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No"";"
szSQL = "SELECT * FROM [Sheet1$];"
Set rs = New ADODB.Recordset
rs.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
Workbooks("Log.xls").Sheets(1).Cells(1, 1).CopyFromRecordset rs, 1, _
rs.Fields.Count
rs.Close
Set rs = Nothing
End Function
 
G

Geoff

Sorry but it doesn't answer my question. After testing the great examples I
find that any blanks in the first row of the source are copied to the ADO
Tester file with the letter F and the column number. Blanks elsewhere in the
data are left blank.
The data files I have to deal with can have column headers at the bottom of
the data table, part way through or even no headers on some columns. This
means there can be blanks on the first row and I would need to ensure they
remain blank as I tidy the data up.
Which is where I started - how do I make sure if cell A1 is blank in the
source that it is replicated in the Log file?

Geoff

Geoff said:
Ok, I'll start testing. Thank you.

Geoff

Ron de Bruin said:
Use the code in the links on top of the page
You have much more control then and it is always working correct.


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Geoff said:
Thank you for the quick response but that's a lot of code to go through
immediately and establish if it answers my question which is what happens if
the first column of source data is empty? Multiple workbooks comes after
I've settled this matter.

Geoff

:

Try the examples for more workbooks on this page
http://www.rondebruin.nl/ado.htm

--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Hi
I would like to copy the first row of data from a number of wbooks using ADO
but for now the code below is just for 1 source wbook to the Log file.
It copies row 1 data from Test1.xls in the "C" directory to wherever Log.xls
is installed. The code works fine providing there is data in cell A1. But
if the first cell containing data in the source file (test1) is say C1, then
data is still copied into the Log file starting at A1 whereas it ought to be
C1. Empty columns elsewhere in the source file row1 are copied correctly
How can I rectify this?
Is my approach the best way to go about the process for multiple wbooks?

T.I.A.

Geoff

Option Explicit
Option Private Module

Sub Test2()
GetData "C:\Test1.xls", "Sheet1", "A1:IV1"
End Sub

Function GetData(SourceFile As Variant, SourceSheet As String, sourceRange
As _ String)
Dim rs As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No"";"
szSQL = "SELECT * FROM [Sheet1$];"
Set rs = New ADODB.Recordset
rs.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
Workbooks("Log.xls").Sheets(1).Cells(1, 1).CopyFromRecordset rs, 1, _
rs.Fields.Count
rs.Close
Set rs = Nothing
End Function
 
R

Ron de Bruin

Use the code in the links on top of the page
You have much more control then and it is always working correct.


See the pages below if you want to open the files with code and merge the data

Merge data from all workbooks in a folder(Dir)
http://www.rondebruin.nl/copy3.htm

Merge data from all workbooks in a folder(FSO)
http://www.rondebruin.nl/fso.htm

RDBMerge Add-in (very easy)
http://www.rondebruin.nl/merge.htm


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Geoff said:
Sorry but it doesn't answer my question. After testing the great examples I
find that any blanks in the first row of the source are copied to the ADO
Tester file with the letter F and the column number. Blanks elsewhere in the
data are left blank.
The data files I have to deal with can have column headers at the bottom of
the data table, part way through or even no headers on some columns. This
means there can be blanks on the first row and I would need to ensure they
remain blank as I tidy the data up.
Which is where I started - how do I make sure if cell A1 is blank in the
source that it is replicated in the Log file?

Geoff

Geoff said:
Ok, I'll start testing. Thank you.

Geoff

Ron de Bruin said:
Use the code in the links on top of the page
You have much more control then and it is always working correct.


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Thank you for the quick response but that's a lot of code to go through
immediately and establish if it answers my question which is what happens if
the first column of source data is empty? Multiple workbooks comes after
I've settled this matter.

Geoff

:

Try the examples for more workbooks on this page
http://www.rondebruin.nl/ado.htm

--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Hi
I would like to copy the first row of data from a number of wbooks using ADO
but for now the code below is just for 1 source wbook to the Log file.
It copies row 1 data from Test1.xls in the "C" directory to wherever Log.xls
is installed. The code works fine providing there is data in cell A1. But
if the first cell containing data in the source file (test1) is say C1, then
data is still copied into the Log file starting at A1 whereas it ought to be
C1. Empty columns elsewhere in the source file row1 are copied correctly
How can I rectify this?
Is my approach the best way to go about the process for multiple wbooks?

T.I.A.

Geoff

Option Explicit
Option Private Module

Sub Test2()
GetData "C:\Test1.xls", "Sheet1", "A1:IV1"
End Sub

Function GetData(SourceFile As Variant, SourceSheet As String, sourceRange
As _ String)
Dim rs As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No"";"
szSQL = "SELECT * FROM [Sheet1$];"
Set rs = New ADODB.Recordset
rs.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
Workbooks("Log.xls").Sheets(1).Cells(1, 1).CopyFromRecordset rs, 1, _
rs.Fields.Count
rs.Close
Set rs = Nothing
End Function
 
G

Geoff

Apologies if I have not made myself clear. The issue at the moment is not to
do with multiple workbooks.

It is to sort out what happens if there is a gap in the headers.

In the examples supplied if there is a blank header then:
rsData.Fields(lCount).Name = the letter F plus the column number where the
blank occurred.

I cannot have F1 or F2 inserted in the log file, it must remain blank.

Geoff

Ron de Bruin said:
Use the code in the links on top of the page
You have much more control then and it is always working correct.


See the pages below if you want to open the files with code and merge the data

Merge data from all workbooks in a folder(Dir)
http://www.rondebruin.nl/copy3.htm

Merge data from all workbooks in a folder(FSO)
http://www.rondebruin.nl/fso.htm

RDBMerge Add-in (very easy)
http://www.rondebruin.nl/merge.htm


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Geoff said:
Sorry but it doesn't answer my question. After testing the great examples I
find that any blanks in the first row of the source are copied to the ADO
Tester file with the letter F and the column number. Blanks elsewhere in the
data are left blank.
The data files I have to deal with can have column headers at the bottom of
the data table, part way through or even no headers on some columns. This
means there can be blanks on the first row and I would need to ensure they
remain blank as I tidy the data up.
Which is where I started - how do I make sure if cell A1 is blank in the
source that it is replicated in the Log file?

Geoff

Geoff said:
Ok, I'll start testing. Thank you.

Geoff

:

Use the code in the links on top of the page
You have much more control then and it is always working correct.


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Thank you for the quick response but that's a lot of code to go through
immediately and establish if it answers my question which is what happens if
the first column of source data is empty? Multiple workbooks comes after
I've settled this matter.

Geoff

:

Try the examples for more workbooks on this page
http://www.rondebruin.nl/ado.htm

--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Hi
I would like to copy the first row of data from a number of wbooks using ADO
but for now the code below is just for 1 source wbook to the Log file.
It copies row 1 data from Test1.xls in the "C" directory to wherever Log.xls
is installed. The code works fine providing there is data in cell A1. But
if the first cell containing data in the source file (test1) is say C1, then
data is still copied into the Log file starting at A1 whereas it ought to be
C1. Empty columns elsewhere in the source file row1 are copied correctly
How can I rectify this?
Is my approach the best way to go about the process for multiple wbooks?

T.I.A.

Geoff

Option Explicit
Option Private Module

Sub Test2()
GetData "C:\Test1.xls", "Sheet1", "A1:IV1"
End Sub

Function GetData(SourceFile As Variant, SourceSheet As String, sourceRange
As _ String)
Dim rs As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No"";"
szSQL = "SELECT * FROM [Sheet1$];"
Set rs = New ADODB.Recordset
rs.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
Workbooks("Log.xls").Sheets(1).Cells(1, 1).CopyFromRecordset rs, 1, _
rs.Fields.Count
rs.Close
Set rs = Nothing
End Function
 
G

Geoff

For the purpose of copying the first row of data - including any gaps in the
source file I put this into your function code and it now permits gaps
without filling the cell with F and whatever colnum.

For lCount = 0 To rsData.Fields.Count - 1
If Not rsData.Fields(lCount).Name = "F" & 1 + lCount Then
TargetRange.Cells(1, 1 + lCount).Value = rsData.Fields(lCount).Name
Else
TargetRange.Cells(1, 1 + lCount).Value = ""
End If
Next lCount

It still does not answer my question which was how to use the
CopyFromRecordset method. It seems to me the recordset starts at the first
non blank column of source data which may not be column A.

But thank you for the suggestions I am sure the multiple wbook solutions you
provide will come in very useful.

Geoff

Geoff said:
Apologies if I have not made myself clear. The issue at the moment is not to
do with multiple workbooks.

It is to sort out what happens if there is a gap in the headers.

In the examples supplied if there is a blank header then:
rsData.Fields(lCount).Name = the letter F plus the column number where the
blank occurred.

I cannot have F1 or F2 inserted in the log file, it must remain blank.

Geoff

Ron de Bruin said:
Use the code in the links on top of the page
You have much more control then and it is always working correct.


See the pages below if you want to open the files with code and merge the data

Merge data from all workbooks in a folder(Dir)
http://www.rondebruin.nl/copy3.htm

Merge data from all workbooks in a folder(FSO)
http://www.rondebruin.nl/fso.htm

RDBMerge Add-in (very easy)
http://www.rondebruin.nl/merge.htm


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Geoff said:
Sorry but it doesn't answer my question. After testing the great examples I
find that any blanks in the first row of the source are copied to the ADO
Tester file with the letter F and the column number. Blanks elsewhere in the
data are left blank.
The data files I have to deal with can have column headers at the bottom of
the data table, part way through or even no headers on some columns. This
means there can be blanks on the first row and I would need to ensure they
remain blank as I tidy the data up.
Which is where I started - how do I make sure if cell A1 is blank in the
source that it is replicated in the Log file?

Geoff

:

Ok, I'll start testing. Thank you.

Geoff

:

Use the code in the links on top of the page
You have much more control then and it is always working correct.


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Thank you for the quick response but that's a lot of code to go through
immediately and establish if it answers my question which is what happens if
the first column of source data is empty? Multiple workbooks comes after
I've settled this matter.

Geoff

:

Try the examples for more workbooks on this page
http://www.rondebruin.nl/ado.htm

--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Hi
I would like to copy the first row of data from a number of wbooks using ADO
but for now the code below is just for 1 source wbook to the Log file.
It copies row 1 data from Test1.xls in the "C" directory to wherever Log.xls
is installed. The code works fine providing there is data in cell A1. But
if the first cell containing data in the source file (test1) is say C1, then
data is still copied into the Log file starting at A1 whereas it ought to be
C1. Empty columns elsewhere in the source file row1 are copied correctly
How can I rectify this?
Is my approach the best way to go about the process for multiple wbooks?

T.I.A.

Geoff

Option Explicit
Option Private Module

Sub Test2()
GetData "C:\Test1.xls", "Sheet1", "A1:IV1"
End Sub

Function GetData(SourceFile As Variant, SourceSheet As String, sourceRange
As _ String)
Dim rs As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No"";"
szSQL = "SELECT * FROM [Sheet1$];"
Set rs = New ADODB.Recordset
rs.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
Workbooks("Log.xls").Sheets(1).Cells(1, 1).CopyFromRecordset rs, 1, _
rs.Fields.Count
rs.Close
Set rs = Nothing
End Function
 
R

Ron de Bruin

Forget ADO

Use the code that open the workbooks in the links I posted
You have full control then

http://www.rondebruin.nl/copy3.htm
Try example 2 to select the workbook you want


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Geoff said:
For the purpose of copying the first row of data - including any gaps in the
source file I put this into your function code and it now permits gaps
without filling the cell with F and whatever colnum.

For lCount = 0 To rsData.Fields.Count - 1
If Not rsData.Fields(lCount).Name = "F" & 1 + lCount Then
TargetRange.Cells(1, 1 + lCount).Value = rsData.Fields(lCount).Name
Else
TargetRange.Cells(1, 1 + lCount).Value = ""
End If
Next lCount

It still does not answer my question which was how to use the
CopyFromRecordset method. It seems to me the recordset starts at the first
non blank column of source data which may not be column A.

But thank you for the suggestions I am sure the multiple wbook solutions you
provide will come in very useful.

Geoff

Geoff said:
Apologies if I have not made myself clear. The issue at the moment is not to
do with multiple workbooks.

It is to sort out what happens if there is a gap in the headers.

In the examples supplied if there is a blank header then:
rsData.Fields(lCount).Name = the letter F plus the column number where the
blank occurred.

I cannot have F1 or F2 inserted in the log file, it must remain blank.

Geoff

Ron de Bruin said:
Use the code in the links on top of the page
You have much more control then and it is always working correct.


See the pages below if you want to open the files with code and merge the data

Merge data from all workbooks in a folder(Dir)
http://www.rondebruin.nl/copy3.htm

Merge data from all workbooks in a folder(FSO)
http://www.rondebruin.nl/fso.htm

RDBMerge Add-in (very easy)
http://www.rondebruin.nl/merge.htm


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Sorry but it doesn't answer my question. After testing the great examples I
find that any blanks in the first row of the source are copied to the ADO
Tester file with the letter F and the column number. Blanks elsewhere in the
data are left blank.
The data files I have to deal with can have column headers at the bottom of
the data table, part way through or even no headers on some columns. This
means there can be blanks on the first row and I would need to ensure they
remain blank as I tidy the data up.
Which is where I started - how do I make sure if cell A1 is blank in the
source that it is replicated in the Log file?

Geoff

:

Ok, I'll start testing. Thank you.

Geoff

:

Use the code in the links on top of the page
You have much more control then and it is always working correct.


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Thank you for the quick response but that's a lot of code to go through
immediately and establish if it answers my question which is what happens if
the first column of source data is empty? Multiple workbooks comes after
I've settled this matter.

Geoff

:

Try the examples for more workbooks on this page
http://www.rondebruin.nl/ado.htm

--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Hi
I would like to copy the first row of data from a number of wbooks using ADO
but for now the code below is just for 1 source wbook to the Log file.
It copies row 1 data from Test1.xls in the "C" directory to wherever Log.xls
is installed. The code works fine providing there is data in cell A1. But
if the first cell containing data in the source file (test1) is say C1, then
data is still copied into the Log file starting at A1 whereas it ought to be
C1. Empty columns elsewhere in the source file row1 are copied correctly
How can I rectify this?
Is my approach the best way to go about the process for multiple wbooks?

T.I.A.

Geoff

Option Explicit
Option Private Module

Sub Test2()
GetData "C:\Test1.xls", "Sheet1", "A1:IV1"
End Sub

Function GetData(SourceFile As Variant, SourceSheet As String, sourceRange
As _ String)
Dim rs As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No"";"
szSQL = "SELECT * FROM [Sheet1$];"
Set rs = New ADODB.Recordset
rs.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
Workbooks("Log.xls").Sheets(1).Cells(1, 1).CopyFromRecordset rs, 1, _
rs.Fields.Count
rs.Close
Set rs = Nothing
End Function
 
G

Geoff

Thanks, that is something which I can adapt very well.

I will test to see which is the faster, that or the adapted ADO solution.
There are times when 40 plus wboooks can arrive with dataheaders in varying
columns and greatly differing numbers of records. The first assessment to be
made is how the wbooks might be grouped with similar data patterns, hence
extracting the data headers if available, to a log file. So speed is of the
essence before the real work of extracting relevant data begins.

Geoff

Ron de Bruin said:
Forget ADO

Use the code that open the workbooks in the links I posted
You have full control then

http://www.rondebruin.nl/copy3.htm
Try example 2 to select the workbook you want


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Geoff said:
For the purpose of copying the first row of data - including any gaps in the
source file I put this into your function code and it now permits gaps
without filling the cell with F and whatever colnum.

For lCount = 0 To rsData.Fields.Count - 1
If Not rsData.Fields(lCount).Name = "F" & 1 + lCount Then
TargetRange.Cells(1, 1 + lCount).Value = rsData.Fields(lCount).Name
Else
TargetRange.Cells(1, 1 + lCount).Value = ""
End If
Next lCount

It still does not answer my question which was how to use the
CopyFromRecordset method. It seems to me the recordset starts at the first
non blank column of source data which may not be column A.

But thank you for the suggestions I am sure the multiple wbook solutions you
provide will come in very useful.

Geoff

Geoff said:
Apologies if I have not made myself clear. The issue at the moment is not to
do with multiple workbooks.

It is to sort out what happens if there is a gap in the headers.

In the examples supplied if there is a blank header then:
rsData.Fields(lCount).Name = the letter F plus the column number where the
blank occurred.

I cannot have F1 or F2 inserted in the log file, it must remain blank.

Geoff

:

Use the code in the links on top of the page
You have much more control then and it is always working correct.


See the pages below if you want to open the files with code and merge the data

Merge data from all workbooks in a folder(Dir)
http://www.rondebruin.nl/copy3.htm

Merge data from all workbooks in a folder(FSO)
http://www.rondebruin.nl/fso.htm

RDBMerge Add-in (very easy)
http://www.rondebruin.nl/merge.htm


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Sorry but it doesn't answer my question. After testing the great examples I
find that any blanks in the first row of the source are copied to the ADO
Tester file with the letter F and the column number. Blanks elsewhere in the
data are left blank.
The data files I have to deal with can have column headers at the bottom of
the data table, part way through or even no headers on some columns. This
means there can be blanks on the first row and I would need to ensure they
remain blank as I tidy the data up.
Which is where I started - how do I make sure if cell A1 is blank in the
source that it is replicated in the Log file?

Geoff

:

Ok, I'll start testing. Thank you.

Geoff

:

Use the code in the links on top of the page
You have much more control then and it is always working correct.


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Thank you for the quick response but that's a lot of code to go through
immediately and establish if it answers my question which is what happens if
the first column of source data is empty? Multiple workbooks comes after
I've settled this matter.

Geoff

:

Try the examples for more workbooks on this page
http://www.rondebruin.nl/ado.htm

--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Hi
I would like to copy the first row of data from a number of wbooks using ADO
but for now the code below is just for 1 source wbook to the Log file.
It copies row 1 data from Test1.xls in the "C" directory to wherever Log.xls
is installed. The code works fine providing there is data in cell A1. But
if the first cell containing data in the source file (test1) is say C1, then
data is still copied into the Log file starting at A1 whereas it ought to be
C1. Empty columns elsewhere in the source file row1 are copied correctly
How can I rectify this?
Is my approach the best way to go about the process for multiple wbooks?

T.I.A.

Geoff

Option Explicit
Option Private Module

Sub Test2()
GetData "C:\Test1.xls", "Sheet1", "A1:IV1"
End Sub

Function GetData(SourceFile As Variant, SourceSheet As String, sourceRange
As _ String)
Dim rs As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No"";"
szSQL = "SELECT * FROM [Sheet1$];"
Set rs = New ADODB.Recordset
rs.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
Workbooks("Log.xls").Sheets(1).Cells(1, 1).CopyFromRecordset rs, 1, _
rs.Fields.Count
rs.Close
Set rs = Nothing
End Function
 
G

Geoff

After lots of testing and blank cell A1 issues resolved......

mean time to extract first row from 32 assorted size workbooks:-

non ADO = 11.29 seconds

with ADO = 2.27 seconds

No contest.

Geoff

Geoff said:
Thanks, that is something which I can adapt very well.

I will test to see which is the faster, that or the adapted ADO solution.
There are times when 40 plus wboooks can arrive with dataheaders in varying
columns and greatly differing numbers of records. The first assessment to be
made is how the wbooks might be grouped with similar data patterns, hence
extracting the data headers if available, to a log file. So speed is of the
essence before the real work of extracting relevant data begins.

Geoff

Ron de Bruin said:
Forget ADO

Use the code that open the workbooks in the links I posted
You have full control then

http://www.rondebruin.nl/copy3.htm
Try example 2 to select the workbook you want


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Geoff said:
For the purpose of copying the first row of data - including any gaps in the
source file I put this into your function code and it now permits gaps
without filling the cell with F and whatever colnum.

For lCount = 0 To rsData.Fields.Count - 1
If Not rsData.Fields(lCount).Name = "F" & 1 + lCount Then
TargetRange.Cells(1, 1 + lCount).Value = rsData.Fields(lCount).Name
Else
TargetRange.Cells(1, 1 + lCount).Value = ""
End If
Next lCount

It still does not answer my question which was how to use the
CopyFromRecordset method. It seems to me the recordset starts at the first
non blank column of source data which may not be column A.

But thank you for the suggestions I am sure the multiple wbook solutions you
provide will come in very useful.

Geoff

:

Apologies if I have not made myself clear. The issue at the moment is not to
do with multiple workbooks.

It is to sort out what happens if there is a gap in the headers.

In the examples supplied if there is a blank header then:
rsData.Fields(lCount).Name = the letter F plus the column number where the
blank occurred.

I cannot have F1 or F2 inserted in the log file, it must remain blank.

Geoff

:

Use the code in the links on top of the page
You have much more control then and it is always working correct.


See the pages below if you want to open the files with code and merge the data

Merge data from all workbooks in a folder(Dir)
http://www.rondebruin.nl/copy3.htm

Merge data from all workbooks in a folder(FSO)
http://www.rondebruin.nl/fso.htm

RDBMerge Add-in (very easy)
http://www.rondebruin.nl/merge.htm


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Sorry but it doesn't answer my question. After testing the great examples I
find that any blanks in the first row of the source are copied to the ADO
Tester file with the letter F and the column number. Blanks elsewhere in the
data are left blank.
The data files I have to deal with can have column headers at the bottom of
the data table, part way through or even no headers on some columns. This
means there can be blanks on the first row and I would need to ensure they
remain blank as I tidy the data up.
Which is where I started - how do I make sure if cell A1 is blank in the
source that it is replicated in the Log file?

Geoff

:

Ok, I'll start testing. Thank you.

Geoff

:

Use the code in the links on top of the page
You have much more control then and it is always working correct.


--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Thank you for the quick response but that's a lot of code to go through
immediately and establish if it answers my question which is what happens if
the first column of source data is empty? Multiple workbooks comes after
I've settled this matter.

Geoff

:

Try the examples for more workbooks on this page
http://www.rondebruin.nl/ado.htm

--

Regards Ron de Bruin
http://www.rondebruin.nl/tips.htm


Hi
I would like to copy the first row of data from a number of wbooks using ADO
but for now the code below is just for 1 source wbook to the Log file.
It copies row 1 data from Test1.xls in the "C" directory to wherever Log.xls
is installed. The code works fine providing there is data in cell A1. But
if the first cell containing data in the source file (test1) is say C1, then
data is still copied into the Log file starting at A1 whereas it ought to be
C1. Empty columns elsewhere in the source file row1 are copied correctly
How can I rectify this?
Is my approach the best way to go about the process for multiple wbooks?

T.I.A.

Geoff

Option Explicit
Option Private Module

Sub Test2()
GetData "C:\Test1.xls", "Sheet1", "A1:IV1"
End Sub

Function GetData(SourceFile As Variant, SourceSheet As String, sourceRange
As _ String)
Dim rs As ADODB.Recordset
Dim szConnect As String
Dim szSQL As String

szConnect = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & SourceFile & ";" & _
"Extended Properties=""Excel 8.0;HDR=No"";"
szSQL = "SELECT * FROM [Sheet1$];"
Set rs = New ADODB.Recordset
rs.Open szSQL, szConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
Workbooks("Log.xls").Sheets(1).Cells(1, 1).CopyFromRecordset rs, 1, _
rs.Fields.Count
rs.Close
Set rs = Nothing
End Function
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top