データシートのサブフォームをメインフォームから検索

サブフォームでデータシートによる一覧表形式で表示した場合、
メインフォームから特定の行を検索してその行に飛ぶ方法です。


'**************************************************
'【メインフォームでサブフォーム変数】
'まずメインフォームでサブフォームを変数として定義します。

Option Compare Database
Option Explicit

Private WithEvents frmSubSheet As Form



'**************************************************
'【メインフォームを開く時】
'サブフォームを設定します。

Private Sub Form_Open(Cancel As Integer)
    Set frmSubSheet = Me!subSheetInfo.Form
End Sub



'**************************************************
'【メインフォームからサブフォームを検索】
'サブフォームへ検索実行。

    strSQL = "TENPOCODE = " & Chr(34) & strTenpoCode & Chr(34)
       
    'サブフォームの位置検索
    frmSubSheet.Recordset.FindFirst strSQL
    frmSubSheet.Requery      'サブフォームの表示更新
    DoEvents




'**************************************************

ACCESS 2010 で使っています。 

フォームを×で閉じても更新されない方法

フォームを×で閉じても更新されない方法


フォームで入力画面を作り、入力が行われた場合、登録ボタンで更新させようとします。
(フォームのレコードソースにはテーブルかクエリが設定された場合です。)

●フォームが閉じるイベントの発生順序として
(1) Unload → (2) Deactivate → (3) Close
とよく説明文がありますが、実際に入力があった場合には、Unload の前に BeforeUpdate も発生します。


●もう一つの条件として、フォームに入力があった時には、Dirty というイベントも発生します。
この時には、DirtyというプロパティがTrueとなります。
何も入力が無ければ Dirty = False ですね。


●そこでまずは、×で閉じた時に、Form_BeforeUpdate で更新を無効にします。

Private Sub Form_BeforeUpdate(Cancel As Integer)
    If Me.Dirty Then
        DoCmd.RunCommand acCmdUndo
     End If
End Sub

●しかし登録ボタンが押された時も上記の BeforeUpdate が発生してしまい心ならずも入力内容が無効となってしまいます。
そこでボタンが押されたら BeforeUpdate のイベントを無効にしてしまいます。

Private Sub cmdUpdate_Click()

    intReturn = MsgBox("登録内容を更新しますか?", vbOKCancel)
    If intReturn = vbOK Then
        Me.BeforeUpdate = ""
        DoCmd.RunCommand acCmdSaveRecord
        Me.BeforeUpdate = "[イベント プロシージャ]"
        Msgbox "登録されました!"
    Else
        DoCmd.RunCommand acCmdUndo
        Msgbox "登録は行われませんでした!"
    End If
    DoEvents

End Sub


●これで、入力内容を更新したければボタンを押す、でもボタンを押さずに×で閉じたら入力内容は更新されずにフォームを閉じることが出来ます。


●ACCESSでいろいろな書き込みがたくさんの方々であり、それを試行錯誤でまとめてみました。
多彩な参考テクニックを教えて下さった皆様に感謝します。


サブフォームに選択クエリをかけ上から順に読み取る方法

サブフォームに選択クエリをかけ上から順に読み取る方法


サブフォームを置いてテーブルを表示するのですが、そのテーブルに選択クエリをかけて表示し、なおかつ上から順に読み込もうとする方法です。

(1)まず、サブフォームを定義します。
メインフォームのコードの最初に書きます。

Option Compare Database
Option Explicit

Private WithEvents frmSubSheet As Form
’frmSubSheetは任意の名前


(2)フォーム開く時のイベントで(1)のフォームを設定します
subSheetInfoはメインフォームでのサブフォーム名です

Private Sub Form_Open(Cancel As Integer)
    Set frmSubSheet = Me!subSheetInfo.Form                 

End Sub



(3)サブフォームの表示を内容を選択クエリ文を記述して内容をしぼります

'売上テーブルで金額が10000円以上のものをユーザーコード順に表示
'本来ならば SELECT  *  とはせずに項目名をちゃんと記述すること
strSQL = "SELECT  * tblSALES WHERE MONEY > 10000 ORDER BY USERCODE;"

'サブフォームのレコードソースを設定
frmSubSheet.RecordSource = sstrSQL
frmSubSheet.Requery
DoEvents

'念のため選択したレコード件数を取得
lngRecCount = frmSubSheet.Recordset.RecordCount
MsgBox slngRecCount



(4)順に読み込みします
frmSubSheet.Recordset.MoveFirst
    Do Until frmSubSheet.Recordset.EOF()
         MsgBox frmSubSheet![MONEY]
         frmSubSheet.Recordset.MoveNext
    Loop



◆以上のようなサンプルでACCESS2010で動きました。
備忘録でした。


   


ELECOM LANケーブルの外被の文字

ACCESSとは関係ないんですが・・・

ELECOMのLANケーブルを買いました。


LANケーブルの外被に記載されていた文字です。

◆LD-CTN/BU2 (CAT 5E 青 2m)
ELECOM Laneed 26AWG 4P 5N BU216H011Z N58 B

◆LD-GPN/BU3 (CAT 6 青 3m)
ELECOM Laneed 26AWG 4P 6N B02166252Z N67 B



◇ケーブルの外被には明確にカテゴリの番号が記述されていませんでした。
上記から察するに、5Nとか6Nで判断するのでしょうか。









ACCESS2007を最小化で起動してフォームを開く方法

ACCESS2007を最小化で起動してフォームを開く方法

いろいろ検索していろんな方法を試してみたのですが、一番簡単な方法は
Windows Script Hostを使うという手段でした。

VBSのスクリプトを記述したファイルを保存します。記述のしかたは下記の例を参考にして下さい。

◆VBSスクリプト
Set WshShell = WScript.CreateObject("WScript.Shell")
Return = WshShell.Run("MSACCESS.EXE " & "C:\BBB.accdb", 2,false)

(1) ACCESSファイルはBBB.accdbです。フルパスのこと。例ではCドライブの直下です。
(2) 2番目のパラメータは2は、ウィンドウをアクティブにし、最小化ウィンドウとして表示します。
(3) 3番目のパラメータFalseは、プログラムが開始するとWSHは終了します。待機しません。
(4) ユーザー変数は必要ありません。

これでNNNN.vbs と保存します。


◆ACCESSのフォームの設定
(1) 境界線スタイル → ダイアログ
 ポップアップ → はい

(2) Form_Openイベントで次のコマンドを記述します
DoCmd.RunCommand acCmdAppMinimize



◆vbsを起動
NNNN.vbs を起動してみて下さい。
ACCESSのオプションのフォームの表示で指定したフォームがいきなり開くと思います。
※開かなかったたらうまく調整してみて下さい。


◆ACCESSをデザインで開く時は、VBSをシフトを押しながら開くのではなく、
BBB.accdb をシフトを押しながら開いて下さい。


◆実際業務する現場では、VBSのショートカットをデスクトップに置いて、それを起動するようにしています。


・VBSをシフトを押しながら開くと最大表示にならなかったです。
 なぜだか解析している時間がないので他の方に譲ります。すみませんです。

livedoor プロフィール
タグクラウド
QRコード
QRコード
  • ライブドアブログ