Solved

Extract Data from Closed XLSX Workbook Using ADO

Posted on 2011-09-30
7
601 Views
Last Modified: 2012-06-21
All,
I wrote this code a long time ago and it works great for 2003 and earlier workbooks.  It extracts data from a closed excel workbook given a named range in the closed workbook.  However, it does not work with 2007 files (xlsx).  I get an error on the cnn.open line.  I understand the file format completely changed from 2003 to 2007.  I have looked an looked and I can't find any examples using ADO with later versions of Excel.

There are three files attached.  The first contains the code below.  The next two are the same except for one is a xls and the other is a xlsx.  Both contain a range named "rngFrom" on Sheet1.  This is the data that gets extracted.

Can someone please help me get this working.  Thanks

Kyle
Sub ExtractData()
Dim cnn As ADODB.Connection
Dim rs1 As ADODB.Recordset
Dim WBCopyFrom As String, rngCopyFrom As String
Dim rngCopyTo As String
Dim PathName As String
Dim strSQL1 As String

'Initiailze variables
'WBCopyFrom = "TestingTesting.xls"   '<--This works
WBCopyFrom = "TestingTesting.xlsx"   '<--This does not work
rngCopyFrom = "rngFrom"
rngCopyTo = "rngTo"

'Create connection to closed workbook
PathName = ThisWorkbook.Path & "\" & WBCopyFrom
Set cnn = New ADODB.Connection
With cnn
    .Provider = "Microsoft.Jet.OLEDB.4.0"
    .ConnectionString = "Data Source=" & PathName & ";Extended Properties=Excel 8.0;"
    .CursorLocation = adUseClient
    .Open  '<-- Error: "External table is not in the expected format."
End With

'Create SQL string
strSQL1 = "SELECT * FROM [" & rngCopyFrom & "]"

'Create recordset
Set rs1 = New ADODB.Recordset

'Open recordset
rs1.Open strSQL1, cnn, adOpenStatic, adLockOptimistic

'Copy to worksheet
Sheet1.Range(rngCopyTo).CopyFromRecordset rs1

'Clean up
rs1.Close
cnn.Close
End Sub

Open in new window

ExtractFromClosedWB.xlsm
TestingTesting.xls
TestingTesting.xlsx
0
Comment
Question by:kgerb
  • 3
  • 3
7 Comments
 
LVL 19

Expert Comment

by:akoster
ID: 36892061
.XLSX documents are not excel 8.0 but should be excel 12.0 instead.
0
 
LVL 12

Author Comment

by:kgerb
ID: 36892150
Now I get an error "Could not find installable ISAM"???

Kyle
0
 
LVL 17

Accepted Solution

by:
andrewssd3 earned 500 total points
ID: 36892375
If you are also using 2007 or later try this instead
   With mobjConn

        .Provider = "Microsoft.ACE.OLEDB.12.0"

        .ConnectionString = "Data Source=" & wbCopyFrom & ";" & _

                "Extended Properties=Excel 12.0;"

        .Open

    End With

Open in new window

0
IT, Stop Being Called Into Every Meeting

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 
LVL 17

Expert Comment

by:andrewssd3
ID: 36892388
Got some extra blank lines in there - sorry you'll need to delete them
0
 
LVL 12

Author Comment

by:kgerb
ID: 36892461
andrewssd3,
Thanks, it's working.  Can you explain a little bit.  What's the difference between the Jet provider and the Ace provider?  Why does one work and not the other?

Thanks again,
Kyle
0
 
LVL 17

Expert Comment

by:andrewssd3
ID: 36892554
The ACE.OLEDB one is the more recent one and works with Office 2007 and 2010 - I'm not sure of the exact details I'm afraid.  It should also be backward compatible
0
 
LVL 12

Author Comment

by:kgerb
ID: 36892567
No problem.  Thanks so much.  I appreciate your help.

Kyle
0

Featured Post

Highfive + Dolby Voice = No More Audio Complaints!

Poor audio quality is one of the top reasons people don’t use video conferencing. Get the crispest, clearest audio powered by Dolby Voice in every meeting. Highfive and Dolby Voice deliver the best video conferencing and audio experience for every meeting and every room.

Join & Write a Comment

Background What I'm presenting in this article is the result of 2 conditions in my work area: We have a SQL Server production environment but no development or test environment; andWe have an MS Access front end using tables in SQL Server but we a…
This article will guide you to convert a grid from a picture into Excel format using Microsoft OneNote and no other 3rd party application.
The viewer will learn how to  create a slide that will launch other presentations in Microsoft PowerPoint. In the finished slide, each item launches a new PowerPoint presentation and when each is finished it automatically comes back to this slide: …
This Micro Tutorial will demonstrate how to create pivot charts out of a data set. I also added a drop-down menu which allows to choose from different categories in the data set and the chart will automatically update.

746 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

9 Experts available now in Live!

Get 1:1 Help Now