Prev: HELP: Email body transcript deleted when receiving response emails
Next: Locking all text, combo and check boxes
From: Domenick on 25 Mar 2010 16:29 I have an Excel (2007) worksheet that is linked to an MS Access (2003) table. When I refresh the data, the entire table comes over. I would like to filter this data based on the value of a cell in a different worksheet (same workbook) so that it only brings in the data for the specified value. I would also like to specify which fields I want to bring in (like I said, the whole table comes over). Example: My Access table has daily transaction records and a "transaction date" field. I would like to only bring in records that have a "transaction date" that is equal to the date entered in cell "A1" of another worksheet. If I change the date in cell "A1", I would like to bring in just the records for the new date the next time I "Refresh All." Is there a simple way to specify this in Excel or (if necessary) a VBA solution? I don't see a place where I can specify a criteria for the records that I want to bring in. Thanks.
From: B Lynn B on 25 Mar 2010 20:04
Here's the framework for a routine I use for quick extraction of Access data. It can be adapted to pull in multiple filters. Notes: It's necessary to go to References (vba Tools menu) and select the "Microsoft ActiveX Data Objects 2.7 Library" for this to work. In my SQL string the clumps of multiple quote marks are to get the quote character into my query because the field is a text field. I think there might be a better way to do this using chr(xx) - whatever char is for ". Quick simple cheat for getting the right SQL structure if you're not conversant in it is to go into the db, build the query using the query user interface, then switch to SQL view to see how it's constructed. Sub GetCRM() Application.ScreenUpdating = False Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim SysID As String Dim myQry As String Set cn = New ADODB.Connection cn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data " & _ "Source=F:\Data\CRMGrpRecords.mdb;" _ & "Persist Security Info=False" SysID = Range("RecordID").Value myQry = "SELECT * FROM CRMgroups " & _ "WHERE (CRMgroups.SystemID=" & """" & SysID & """" & ");" Set rs = New ADODB.Recordset rs.Open myQry, cn If Not rs.EOF Then Range("TableTop").CopyFromRecordset rs End If rs.Close Set rs = Nothing cn.Close Set cn = Nothing End Sub "Domenick" wrote: > I have an Excel (2007) worksheet that is linked to an MS Access (2003) table. > When I refresh the data, the entire table comes over. I would like to filter > this data based on the value of a cell in a different worksheet (same > workbook) so that it only brings in the data for the specified value. I would > also like to specify which fields I want to bring in (like I said, the whole > table comes over). > > Example: My Access table has daily transaction records and a "transaction > date" field. I would like to only bring in records that have a "transaction > date" that is equal to the date entered in cell "A1" of another worksheet. If > I change the date in cell "A1", I would like to bring in just the records for > the new date the next time I "Refresh All." > > Is there a simple way to specify this in Excel or (if necessary) a VBA > solution? I don't see a place where I can specify a criteria for the records > that I want to bring in. > > Thanks. |