いろいろと考えてみましたが、
>メインフォームの品名の所をWクリックすると、
>品名の一覧表で同じキャラクター名の行が色付きで表示されるように
>したいのです。
ということであれば、単にテーブルを昇順にソートして比較すれば
一目瞭然ではないか、とか。
あるいはテーブルをHTML形式で保存し。いずれかのブラウザでひらいて
たとえばFireFoxならば検索で色表示できますし。
そのようなことで、こういったものは最終目的が何であるか明確にして
作らないと実際に作ってみても質問の内容では単なる遊びに
過ぎないもの、あるいは自己満足のものになります。
一応、質問の内容に沿ったものにしてみましたが、
>一覧表の中でキャラクターAの部分が色付きで表示するようにしたい
というのは、キャラクターAの部分が分かり切っているならばこのような
矛盾した質問は出てこないと思いますし、最悪の場合データにいらないものを
埋め込んだりすることになるので、品名に色をつけることにしました。
コードは少し量があるので、あまり説明はしません。
準備
T品名一覧(一応、このようなテーブル名にしておきます。)に一つ
フィールドを追加います。
検索キー テキスト型
この「検索キー」のプロパティで「Null値の許可」を「はい」に
しておきます。
(1)
以下を標準モジュールに貼り付けます。
Public varToken
Public varKeyToken
Sub funcGetToken(ByVal str1 As Variant, ByVal str2 As Variant)
Dim myLen As Long
Dim i As Long
Dim j As Long
Dim k As Long
myLen = Len(str1)
j = 0
k = 0
For i = 1 To myLen
If Left(str1, i) = Left(str2, i) Then
If i > 1 Then
If i = InStr(i - 1, Left(str1, i), " ") Then
k = k + 1
End If
End If
j = j + 1
End If
Next i
If j > 1 And k >= 1 Then
varKeyToken = Left(str1, j)
If varToken = "" Then
varToken = Left(str1, j)
End If
If Len(varToken) > Len(Left(str1, j)) Then
varToken = Left(str1, j)
End If
End If
End Sub
(2)
以下は、フォームのコマンドボタンのクリック時のイベントにします。
ボタンが4っつあります。
尚、DAOを使いますので参照設定でDAOにチェックがはいっているか
確認してください。
尚、「tx検索品名」というのは、対象となる品名が入力されている
テキストボックスです。実際に合わせて変更してください。
また、「埋め込み0」というのは、サブフォームを表示している
コントロール名で、サブフォームそのものの名前ではありません。
サブフォーム名と同じにしている場合もありますが、プロパティで
「ソースオブジェクト」を確認してください。
Private Sub cmd検索_Click()
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim strText As Variant
Dim strSQL As String
If IsNull(Me!tx検索品名) Then
MsgBox "検索対象の品名が入力されていません。"
Exit Sub
End If
strSQL = "UPDATE T品名一覧 SET T品名一覧.判定キー = Null;"
DoCmd.SetWarnings False
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
varToken = ""
Me.埋め込み0.Form.品名.FormatConditions.Delete
Set db = CurrentDb
Set rs = db.OpenRecordset("T品名一覧", dbOpenDynaset)
rs.Filter = Left(Me!tx検索品名, 1) = Left(rs!品名, 1)
'以下はレコードセットを再設定するものですがたぶん必要はないと
'思いますが念のために設定をコメントアウトして、おいておきます。
' Set rs = rs.OpenRecordset()
If rs.RecordCount > 0 Then
rs.MoveFirst
Do Until rs.EOF
varKeyToken = ""
Call funcGetToken(Me!tx検索品名, rs!品名)
rs.Edit
rs!判定キー = varKeyToken
rs.Update
rs.MoveNext
Loop
If varToken <> "" Then
With Me.埋め込み0.Form.品名.FormatConditions.Add(acExpression, , "品名 Like'" & varToken & "*'")
.ForeColor = vbRed
End With
Else
MsgBox "該当するレコードはありません。"
End If
Else
MsgBox "該当するレコードはありません。"
End If
rs.Close: Set rs = Nothing
db.Close: Set db = Nothing
End Sub
Private Sub cmd書式解除_Click()
Me.埋め込み0.Form.品名.FormatConditions.Delete
End Sub
Private Sub cmd並べ替え解除_Click()
Me.埋め込み0.Form.OrderBy = "品名 ASC"
Me.埋め込み0.Form.OrderByOn = False
End Sub
Private Sub cmd並べ替え_Click()
Me.埋め込み0.Form.OrderBy = "品名 ASC"
Me.埋め込み0.Form.OrderByOn = True
End Sub
このてのものは、あまり作り過ぎたものを表に出すとまずいことも
あるので、このくらいがいいところでは、と思います。
お礼
お忙しい中でのご返信をありがとうございました。 私の場合、VBAが理解にいたっていないため、1つづつ検証させて 頂き、最終目的となるように頑張りたいと思っております。 また、piroin654さんの貴重な時間を割いて頂けたことを光栄に 存じております。 今回のご投稿頂きました内容を理解するまでには時間がかかると 思いますが、引き続き宜しくお願い致します。 最終結果ができましたらご報告させて頂きたいと思っております。 ありがとうございました。