DWUTKA at marlow.com
DWUTKA at marlow.com
Thu Jun 10 13:36:49 CDT 2004
Here ya go Paul:
Function FillAdditionalData(strFilePath As String, dtStart As Date, dtEnd As
Date)
Dim rs As ADODB.Recordset
Dim cnn As ADODB.Connection
Dim strSQL As String
Set cnn = New ADODB.Connection
Set rs = New ADODB.Recordset
With cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Extended Properties") = "Excel 8.0"
.Open strFilePath
End With
strSQL = "SELECT Firstname, Lastname, (SELECT Count(Code) FROM `Contract1$`
WHERE Code=""ATT"" AND " & _
"LastName=T1.LastName AND FirstName=T1.FirstName AND Jobdate BETWEEN #" &
dtStart & _
"# AND #" & dtEnd & "#) AS WorkedDays, (SELECT Count(Code) FROM
`Contract1$`" & _
" WHERE Code=""HOL"" AND LastName=T1.LastName AND FirstName=T1.FirstName AND
" & _
"Jobdate BETWEEN #" & dtStart & "# AND #" & dtEnd & "#) AS Holidays, (SELECT
" & _
"Count(Code) FROM `Contract1$` WHERE Code=""SICK"" AND LastName=T1.LastName
AND " & _
"FirstName=T1.FirstName AND Jobdate BETWEEN #" & dtStart & "# AND #" & dtEnd
& _
"#) AS SickDays " & _
"FROM `Contract1$` AS T1 " & _
"WHERE Jobdate BETWEEN #" & dtStart & "# AND #" & dtEnd & "# " & _
"GROUP BY Lastname, Firstname"
rs.Open strSQL, cnn, adOpenKeyset, adLockReadOnly
If rs.EOF = False Then rs.MoveFirst
Do Until rs.EOF = True
strSQL = "UPDATE `AdditionalData$` SET Worked=" &
rs.Fields("WorkedDays").Value & _
", Holiday=" & rs.Fields("Holidays").Value & ", Sick=" &
rs.Fields("SickDays").Value & _
" WHERE Lastname=""" & rs.Fields("Lastname").Value & _
""" AND Firstname=""" & rs.Fields("Firstname").Value & """;"
cnn.Execute strSQL
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
cnn.Close
Set cnn = Nothing
End Function
To use the code above, call it like this:
Private Sub Command1_Click()
FillAdditionalData "C:\test.xls", #1/1/2004#, #4/1/2004#
MsgBox "Done"
End Sub
A few items to note. For this code to work, the Excel file needs to be
setup the way you explained in the email below. The sheets have to have the
same names, and so do the first lines of the spreadsheet. Also, you cannot
have the file open in excel when the code above is running. In fact, you
don't even need to have excel on the machine that runs this code, since it
is just using ADO. Which brings me to my last point, you will need to set a
reference to ADO, from whatever you run this code from. I wrote it in VB
for you, but it will just copy and paste into Access too. (even excel, not
sure if you can run it inside Excel, if the sheet you are working on is
open....didn't test that.).
Have fun!
Drew
-----Original Message-----
From: accessd-bounces at databaseadvisors.com
[mailto:accessd-bounces at databaseadvisors.com]On Behalf Of
paul.hartland at fsmail.net
Sent: Thursday, June 10, 2004 6:48 AM
To: accessd
Subject: [AccessD] Help With Excel If Possible
To all,
I have a workbook that contains two spreadsheets, first spreadsheet is
called Contract1 and has the following columns of information:
Lastname, Firstname, DOW, JobNo, Code, Jobdate, Hours
Hartland Paul Mon 12345 ATT 01/01/04 8
Hartland Paul Tue 12345 ATT 02/01/04 8
Hartland Paul Wed 12345 HOL 03/01/04 8
Hartland Paul Thu 12345 ATT 04/01/04 8
Hartland Paul Fri 12345 ATT 05/01/04 8
Hartland Paul Sat 12345 ATT 06/01/04 8
Hartland Paul Sun 12345 ATT 07/01/04 8
Williams Tom Mon 12345 HOL 01/01/04 8
Williams Tom Tue 12345 SICK 02/01/04 8
Williams Tom Wed 12345 ATT 03/01/04 8
Etc, etc
DOW = Day Of Week (Mon, Tue etc), Code is either ATT, HOL or SICK.
Everything on the first spreadsheet is ok.
The second spreadsheet is called AdditionalData and has the following
columns of information:
Lastname, Firstname, Worked, Holiday, Sick
Hartland Paul
Williams Tom
And that's about where I have got to, and this is where I need your help. I
need to scan the Contract1 spreadsheet and where the Lastname and Firstname
match from the AdditionalData spreadsheet and say date range
01/01/04-04/01/04 I need to populate the Worked, Holiday and Sick columns
with the count of either ATT, HOL or SICK so that the result would be like
this:
Lastname, Firstname, Worked, Holiday, Sick
Hartland Paul 3 1 0
Williams Tom 1 1 1
Thanks in advance to anyone that can help with this or point me in the right
direction.
Paul Hartland
--
Whatever you Wanadoo:
http://www.wanadoo.co.uk/time/
This email has been checked for most known viruses - find out more at:
http://www.wanadoo.co.uk/help/id/7098.htm
--
_______________________________________________
AccessD mailing list
AccessD at databaseadvisors.com
http://databaseadvisors.com/mailman/listinfo/accessd
Website: http://www.databaseadvisors.com