使用VBA,我怎么可以搜索文本字符串,例如“CHIR”,在一个名为“ServiceYES”表,在该领域的“服务”。
在那之后,我想救相邻场为“CHIR”存在于表“ServicesYES”的所有行。 该“ServiceYES”表如下:
我基本上,要查找所有的“CHIR”,在“服务”一栏,然后保存这些都对CHIR左侧的名称,如“FRANKL_L”,“SANTIA_D”作为一个数组。
感谢提前你的一切帮助。
使用VBA,我怎么可以搜索文本字符串,例如“CHIR”,在一个名为“ServiceYES”表,在该领域的“服务”。
在那之后,我想救相邻场为“CHIR”存在于表“ServicesYES”的所有行。 该“ServiceYES”表如下:
我基本上,要查找所有的“CHIR”,在“服务”一栏,然后保存这些都对CHIR左侧的名称,如“FRANKL_L”,“SANTIA_D”作为一个数组。
感谢提前你的一切帮助。
通过创建一个启动SELECT
查询。
SELECT Code_Perso
FROM ServicesYES
WHERE Service = 'CHIR';
使用SELECT DISTINCT Code_Perso
如果你想只有唯一值。
添加ORDER BY Code_Perso
,如果你愿意让他们按字母顺序排序。
一旦你有一个满意的查询,打开基于该查询DAO记录,并遍历Code_Perso
值返回。
您不需要直接加载他们进入你的最后一个数组。 它可能会更容易将它们添加到一个逗号分隔的字符串。 之后你可以使用Split()
函数(假设你有Access版本> = 2000),以创建阵列。
下面是示例代码,让你开始。 这主要是标准的样板,但它可能实际工作......一旦你给它“yourquery”。
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strItems As String
Dim varItems As Variant
Set db = CurrentDb
Set rs = db.OpenRecordset("yourquery", dbOpenSnapshot)
With rs
Do While Not .EOF
strItems = strItems & "," & !Code_Perso
.MoveNext
Loop
.Close
End With
If Len(strItems) > 0 Then
' discard leading comma '
strItems = Mid(strItems, 2)
varItems = Split(strItems, ",")
Else
MsgBox "Oops. No matching rows found."
End If
Set rs = Nothing
Set db = Nothing
我测试了这一点,它似乎工作。 该功能将拉动所有记录ServiceYes =“CHIR”和转储Code_Person值到一个数组,它会返回:
Function x() As String()
Dim rst As Recordset
Set rst = CurrentDb.OpenRecordset( _
"Select * from ServiceYES where Service='CHIR'")
Dim Arr() As String
Dim i As Integer
While rst.EOF = False
ReDim Preserve Arr(i)
Arr(i) = rst.Fields("Code_Person")
i = i + 1
rst.MoveNext
Wend
x = Arr
End Function
用法示例:
Debug.Print x()(0)
保罗,
下面是我在几分钟内扔在一起。 你可以将其添加到模块中的VBA编辑器。 它使用的手段来得到RecordCount属性正确的行为。 至于returing数组,你可以更新的功能,并创建一个调用程序。 如果你需要的代码位,只是发表评论。
谢谢!
Option Compare Database
Function QueryServiceYES()
Dim db As Database
Dim saveItems() As String
Set db = CurrentDb
Dim rs As DAO.Recordset
Set rs = db.OpenRecordset("SELECT Code_Perso, Service, Favorites " & _
"FROM ServiceYES " & _
"WHERE Service = 'CHIR'")
'bug in recordset, MoveFirst, then MoveLast forces correct invalid "RecordCount"
rs.MoveLast
rs.MoveFirst
ReDim Preserve saveItems(rs.RecordCount) As String
For i = 0 To rs.RecordCount - 1
saveItems(i) = rs.Fields("Code_Perso")
rs.MoveNext
Next i
'print them out
For i = 0 To UBound(saveItems) - 1
Debug.Print saveItems(i)
Next i
rs.Close
Set rs = Nothing
db.Close
Set db = Nothing
End Function