Access コンボボックスの値が変わらない

あるコンボボックスから、値を変えて、その値によって、コンボボックスの中身が変わる仕組みを作成したが、前の情報がリフレッシュされなくて、コンボボックスの内容が変わらない。

Me.Recalc
Me.Refresh

VBAに最初に変化をさせいたコンボボックスに上記をいれたら解決した。

Access 文字列の検索

文字列キーを呼び出して、非連結のフォームにデータを呼び出すVBA

Private Sub outsourcing_no_AfterUpdate()

If DCount(“外注手配番号”, “dbo_outsourcing_running”, “外注手配番号='” & Me.outsourcing_no & “‘”) = 0 Then
MsgBox “外注手配番号の登録がありません。ご確認ください。”
outsourcing_no = Null
Me.call_HNO.SetFocus
Me.outsourcing_no.SetFocus
Else

Me.call_HNO = DLookup(“HNO”, “dbo_outsourcing_running”, “外注手配番号='” & Me.outsourcing_no & “‘”)
Me.call_手順 = DLookup(“手順”, “dbo_outsourcing_running”, “外注手配番号='” & Me.outsourcing_no & “‘”)
Me.call_品名コード = DLookup(“品名コード”, “dbo_outsourcing_running”, “外注手配番号='” & Me.outsourcing_no & “‘”)
Me.call_品名 = DLookup(“品名”, “dbo_outsourcing_running”, “外注手配番号='” & Me.outsourcing_no & “‘”)
Me.call_型式 = DLookup(“型式”, “dbo_outsourcing_running”, “外注手配番号='” & Me.outsourcing_no & “‘”)
Me.call_担当工程 = DLookup(“担当工程”, “dbo_outsourcing_running”, “外注手配番号='” & Me.outsourcing_no & “‘”)
Me.call_メーカー名 = DLookup(“メーカー名”, “dbo_outsourcing_running”, “外注手配番号='” & Me.outsourcing_no & “‘”)
Me.call_加工仕様 = DLookup(“加工仕様”, “dbo_outsourcing_running”, “外注手配番号='” & Me.outsourcing_no & “‘”)
Me.call_加工費 = DLookup(“加工費”, “dbo_outsourcing_running”, “外注手配番号='” & Me.outsourcing_no & “‘”)
Me.call_加工日数 = DLookup(“加工日数”, “dbo_outsourcing_running”, “外注手配番号='” & Me.outsourcing_no & “‘”)
Me.call_加工累計 = DLookup(“加工累計”, “dbo_outsourcing_running”, “外注手配番号='” & Me.outsourcing_no & “‘”)
Me.call_次工程 = DLookup(“次工程”, “dbo_outsourcing_running”, “外注手配番号='” & Me.outsourcing_no & “‘”)

Exit Sub
End If

End Sub

Access 特定文字以降の抽出

Private Sub btn_データ変換_Click()

Dim cn As New ADODB.Connection
Dim rs As New ADODB.Recordset

On Error GoTo ErrRtn

Set cn = CurrentProject.Connection
rs.Open “dbo_old_outsourcing”, cn, adOpenKeyset, adLockOptimistic

cn.BeginTrans

Do While Not rs.EOF

If IsNull(rs!HNO) = True Then

rs!HNO = Mid(rs!外注手配番号, InStr(1, rs!外注手配番号, “-“) + 1, InStr(InStr(1, rs!外注手配番号, “-“) + 1, rs!外注手配番号, “-“) – (InStr(1, rs!外注手配番号, “-“) + 1))

######上記の部分で、”-”で挟まれた間の文字を抽出している。######

‘ rs!手順 = Mid(rs!外注手配番号, InStr(InStr(1, rs!外注手配番号, “-“) + 1, rs!外注手配番号, “-“) + 1)

######上記の部分で、最後の”-”以降の文字を抽出している。######

rs!手順 = Mid(rs!外注手配番号, InStrRev(rs!外注手配番号, “-“) + 1)

######上記の部分で、”-”で挟まれた間の文字を抽出している。つまり右からハイフンの位置を検索しているという違い。処理は同じ結果がでる。######

rs.Update
End If

rs.MoveNext
Loop

cn.CommitTrans

rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

ExitErrRtn:
MsgBox “変換完了しました。”
Exit Sub

ErrRtn:
MsgBox “エラー: ” & Err.Description
cn.RollbackTrans
rs.Close: Set rs = Nothing
cn.Close: Set cn = Nothing

End Sub

Access 1番目コンボボックスから、2段目のコンボボックス抽出

アクセスを使っていると、結構この手法を使う時がある。

最初のコンボボックスで、カテゴリを選択すると、そのカテゴリから、第二のコンボボックス表示を抽出し表示させたい。

例題として、最初のコンボボックスを、カテゴリという名前に、次のコンボボックスの名前を、商品名とします。入力時のマスターデータとして下記のようなテーブルがあるとします。

ID カテゴリ 商品名

(1)フォームに2つのコンボボックスを設置して、コントロールに選択したデータをいれたいテーブルのフィールド名を選択します。
※もしくは、テーブル時点から、ルックアップウイザード等でコンボ形式になっている場合は、最初からフォームでもコンボボックスになっているので、コントロールの設定は必要ありません。今回は、非連結のコンボボックスを設置してから、テーブルのコントロールと紐づけした例を記載した。

(2)値集合ソースを選択して、そのコンボボックスに表示したいカテゴリのテーブルをクエリーにかけて表示できるようにします。
※並び替え等をやる事も、このクエリー段階で設定しておきます。

(3)商品名というコンボボックスを(1)の様にして設定します。
※(2)の手順で表示させたい値のテーブルのクエリーにて設定します。その時に、フォームのカテゴリの値により、商品名が抽出できるようにします。

[Forms]![商品選択画面]![カテゴリ]

(4)カテゴリのコンボボックスを選択後、商品名が抽出選択になるように、更新後処理として、VBAを設定しておきます。

Private Sub カテゴリ_AfterUpdate()

Me!商品名.Requery

End Sub

以上の設定で、最初のコンボボックスで選択したカテゴリ内の、商品名しか、次のコンボボックスには出なくなります。