Though many database systems have come , still there is a need to use Excel as Backend database. The reasons might be many -- you get Excel sheets as a Report and do not want to import that into Access or SQL Server
Here is a simple code that will allow you to do exactly that
Sub Excel_ADO()
Dim cN As ADODB.Connection '* Connection String
Dim RS As ADODB.Recordset '* Record Set
Dim sQuery As String '* Query String
Dim i1 As Long
Dim lMaxRow As Long '* Last Row in the Sheet
Dim iRevCol As Integer '*
Dim i3 As Integer
On Error GoTo ADO_ERROR
Set cN = New ADODB.Connection
cN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Orginal.xls;Extended Properties=Excel 8.0;Persist Security Info=False"
cN.ConnectionTimeout = 40
cN.Open
Set RS = New ADODB.Recordset
lMaxRow = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Row
iRevCol = 2
For i1 = 2 To lMaxRow
Application.StatusBar = i1
sQuery = "Select * From [Sheet1$]"
RS.ActiveConnection = cN
RS.Source = sQuery
RS.Open
If RS.EOF = True And RS.BOF = True Then
GoTo TakeNextRecord
End If
RS.MoveFirst
Do Until RS.EOF = True
sName = Trim$(RS("Name").Value)
sAge = Trim$(RS("Age").Value)
' Do some operations
RS.MoveNext
Loop
TakeNextRecord:
If RS.State <> adStateClosed Then
RS.Close
End If
Next i1
If Not RS Is Nothing Then Set RS = Nothing
If Not cN Is Nothing Then Set cN = Nothing
ADO_ERROR:
If Err <> 0 Then
Debug.Assert Err = 0
MsgBox Err.Description
Resume Next
End If
End Sub
All the code remains the same as Access ADO code except the change in connection string. cN.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Orginal.xls;Extended Properties=Excel 8.0;Persist Security Info=False"
See also:
Opening Comma Separate File (CSV) through ADOQuery Table with Excel as Data Source
Create Database with ADO / ADO Create Database
ADO connection string for Excel
This gives me an error as Sheet1$ is not a valid name. I also tried the Actual name of sheet, its still not working. Gives me the error as "Could not find object" Please suggest something. This can do a ton of good to me. :)
ReplyDeleteI am also getting this error. "The Microsoft Jet database engine could not find the object 'Sheet1$'.
DeleteHitesh
ReplyDeleteI tried to simulate your error, but couldn't. Can you post the name of the Sheet (does it have any special characters etc)
Using Excel as my database - how can I select specific records to move to MS word for mailing labels?
ReplyDeletei can't understand
ReplyDeleteTry putting the square brackets around the sheet name, i.e [Sheet1$]
ReplyDeletethank you it works by adding some reference library
ReplyDeleteI have an spreadsheet that gets updated every day. My problem is that every time I open the spreadsheet, my queries return OLD information. I tried using cn.Properties.Refresh, but it still does not returned any updates, it still returns the same info as yesterdays. Am I missing something?
ReplyDeleteI Used square brackets for sheet name. but its not working
ReplyDeleteThanks!
ReplyDeleteHint: Make sure you enable the ADODB Library
1) go to VBE (ALT+F11 in excel)
2) Go to Tools > References...
3) Enable "Microsoft ActiveX Data Objects x.x Library"
can u please tell me on how to conduct quiz using excel and track the time in which users have submitted the answer? so that we can find the winners easily. please help me
ReplyDeleteHow to update or delete a recordset?
ReplyDeletethis is my code
open_connection -cal;ling a procedure
strsql = "Delete from [View_Records$]"
Conn.Execute strsql
Updating or deletinng is not allpowed in this ISAM is what i get
What to do? I had used read only false in the open connection also