2016-11-15 75 views
0

我有一个连接到Excel的Access数据库。我需要找到使用搜索条件在记录记录从Excel访问VBA使用搜索Critera在记录集中查找记录

  1. 在MS Access表名是MyTable超过10列的数据
  2. 用户在Excel单元格中输入字符串数据,让我们假设Worksheets("Sheet1").Cells(1, 1)
  3. 我的需求是,宏必须遍历第7列和第10列中的任何匹配字符串,并将三列(列1,列7和列10)中的相应记录集复制到工作表(“ALL”)。单元格(3,1)...单元格3,3),等等

  4. 数据列7和第10列在一个记录单元中将具有超过500个字符的文本。搜索字符串可能存在于多个记录单元中;因此输出将在多个记录集中找到。

我们有instr函数和SQL查询的其他选项吗?

strSQL = "SELECT Qn_No, Categories, Page_Text FROM MyTable WHERE Categories = '" & str1 & "' or “&Page_Text &" 

任何帮助将不胜感激。我提前感谢。

+0

ü确实需要更好的措辞。这不是很清楚你需要什么。 – Kelaref

+0

@Kelaref感谢您查看此内容,我需要在访问中搜索一个表中的记录并将结果输出到excel中。如果用户将文本输入为“货币市场”,则宏应在一个表数据的两个特定列中查看“货币市场”的任何地方的记录集的输出。 – Manish

回答

0

这应该工作。 请记住输入访问文件的路径。

Sub test() 

Dim p As String 'path of access file 
Dim dbConn As Object, dbData As Object 
Dim ws As Worksheet 'worksheet where results will be pasted 
Dim s As String 'text searched 
Dim sql As String 'select statement 
Dim cs As String 'connection string 
Dim v As Variant 'stores query result 


s = Worksheets("Sheet1").Cells(1, 1) 
Set ws = Worksheets("ALL") 

sql = "SELECT Qn_No, Categories, Page_Text " & _ 
    "FROM MyTable " & _ 
    "WHERE Categories = '" & s & "' OR " & _ 
     "Page_Text = '" & s & "'" 

'################################ 
cs = "Provider=Microsoft.ACE.OLEDB.12.0;" & _ 
    "Data Source=" & p & ";Persist Security Info=False;" 

Set dbConn = CreateObject("ADODB.Connection") 
Set dbData = CreateObject("ADODB.Recordset") 
dbConn.ConnectionString = cs 
dbConn.Open 
With dbData 
    .ActiveConnection = dbConn 
    .Source = sql 
    .LockType = 1 
    .CursorType = 2 
    .Open 
End With 
'Connection to access ready 
'############################### 

On Error GoTo NoRecords 'no records 
v = dbData.GetRows 
On Error GoTo 0 

'v is zero based array, an records are transposed 
'Handle it as you wish 

ws.Cells(1, 1).Resize(UBound(v, 1) + 1, UBound(v, 2) + 1).Value = v 
GoTo Quitter 

'###################### 
NoRecords: 
    MsgBox ("No Records Found") 
Quitter: 
    dbData.Close 
    Set dbData = Nothing 
    dbConn.Close 
    Set dbConn = Nothing 

End Sub 
+0

谢谢兄弟!我会用这个,让你知道状态。 – Manish

+0

请注意,ADO可能导致内存泄漏,请考虑DAO http://stackoverflow.com/questions/14396627/insert-data-form-excel-to-access-2010-using-vba/14397496#14397496另外,DAO很多更快和本地访问。 – Fionnuala

+0

@Kelaref这可能是什么语法错误? sql =“SELECT C_WI,C_Inquiry,C_TD_Response”&_ “FROM T_TT”&_ “WHERE [C_Inquiry] LIKE'%”&strSearch&“%'OR”&_ “[C_TD_Response] LIKE'%”&strSearch &“%”“ – Manish