2016-11-15 100 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