Accessでドラッグアンドドロップ|みどシステム工房
Accessでドラッグアンドドロップ
席順やボタンの表示位置をドラッグアンドドロップのようにマウス操作だけでできると便利です。
ドラッグアンドドロップようなクリック操作だけでデータの位置を変える方法を考えてみました。

デスバレー
スピリチュアルな街~セドナ~
【アメリカ合衆国アリゾナ州】


デモ

 

フォーム上に配置した9個のテキスト枠内の名前の位置が2ステップで変更できます。

1.動かしたい名前をクリック
2.動かす位置の枠をクリック

【AD】

 

作り方

テーブルとフォームを用意してVBAで自動化します。

テーブル

データを格納するテーブルを一つ用意し、フィールドを3つ作ります。
・ID(オートナンバー型)
・名前(短いテキスト)
・位置(短いテキスト)

 

テーブル

 

フォーム

データ表示や操作するフォームを一つ用意します。テキスト枠を9個並べます。

テキスト枠に適当な名前を付けます。

テキスト枠に名前を表示するように設定をします。下記のコードを各テキスト枠の[コントロールソース]にコピペしてください。


=IIf(DCount("名前","テーブル","位置='A1'")=0,"",DLookUp("名前","テーブル","位置='A1'"))

*[位置='A1']の「A1」がテキスト枠の名前になりますので適時変更してください。

クリックしたテキスト枠の名前を入力するテキスト枠(オレンジ色)を配置し、名前を「temp」にします。

テーブル

【AD】

 

コード

テキスト枠をクリックしたときの動作をすべてのテキスト枠のプロパティの[クリック時のイベント]にコーディングします。


Private Sub A1_Click()
If IsNull(temp) = True Then
    temp = DLookup("ID", "テーブル", "位置='A1'")
Else
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Set cn = CurrentProject.Connection
    Set rs = New ADODB.Recordset
    rs.CursorLocation = adUseClient
    rs.Open "テーブル", cn, adOpenDynamic, adLockOptimistic
    rs.Find "ID=" & temp
        rs!位置 = "A1"
    rs.Update
    rs.Close
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
    temp = Null
    Me.Refresh
End If
End Sub

*テキスト枠「A1」の例

 

コードの説明
1.テキスト枠「temp」が空欄のとき、クリックしたテキスト枠に表示されている名前の「ID」が入力されます。
2.テキスト枠「temp」に「ID」が入力されているとき、テーブルを開いてテーブルの「temp」に表示されている「ID」の「位置」フィールドにクリックしたテキスト枠の名前を入力されます。

 

サンプルの説明

1.テーブルにIDを1から9まで用意
2.ID1から3の[名前]フィールドに「山田」「佐藤」「加藤」を入力
3.ID1から3の[位置]フィールドにテキスト枠の名前「A1」「B1」「C1」を入力

サンプル入力

 

4.フォームを表示

サンプル入力

 

5.フォーム上で移動させる名前をクリック
6.移動先のテキスト枠をクリック

サンプル入力

 

テーブルを開いて「位置」の値を見るとテキスト枠の名前と一致します。

サンプル入力

 

直感的な操作に役に立つかと思います。ご参考にしていただければ幸です。