Access VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


472 / 9994 ←次へ | 前へ→

【12834】サブフォームの抽出結果をメインフォームに表示させたい
質問  rinrin  - 15/5/26(火) 21:22 -

引用なし
パスワード
   Mainフォーム”R/3コード””小区分名称””中区分名称””大区分名称””内容””具体例””注意点”テキストボックスに、
サブフォーム SubGL勘定の抽出結果を表示させたいと思ってます。

ソースコードの書き方がわかりません。

ご指導よろしくお願いします

Option Compare Database
Option Explicit

Public Function SetFilter()
  Dim stCri As String
'配列変数を使用 配列番号はゼロから始まります。
  Dim MyCount(2) As Integer
  
'Private Sub ComboBoxInit()をCALLプロシージャで呼び出す。
  Call ComboBoxInit

'抽出条件を設定する
  With Me.ActiveControl
    stCri = .Name & " LIKE '" & .Value & "*'"
  End With
  
'上記のlike演算子の条件でフォームフィルターをかける
  Me.X0001GL勘定.Form.Filter = stCri
  Me.X0001GL勘定.Form.FilterOn = True
  
  
'レコード全件を代入する
  MyCount(0) = DCount("*", "X0001GL勘定")
  
'抽出件数を代入する
  MyCount(1) = DCount("*", "X0001GL勘定", Me.ActiveControl.Name & " LIKE '" & Me.ActiveControl.Value & "*'")

'抽出件数をラベルに表示させる
  If MyCount(1) = 0 Then
'レコードが無いときは"抽出データなし"と表示
    Me.L1.Caption = "抽出データなし"
  Else
'レコードがあるときは全レコード件数と抽出件数を表示させる
    Me.L1.Caption = "全レコード " & MyCount(0) & " 件中 " & MyCount(1) & " 件抽出しました"
  End If
  
  Call ラベル情報
End Function

Private Sub Cmd解除_Click()
  ComboBoxInit
  Me.X0001GL勘定.SetFocus
  Me.X0001GL勘定.Form.Filter = ""
  Me.X0001GL勘定.Form.FilterOn = False
End Sub

Private Sub txtGL勘定検索_AfterUpdate()
  Call CallPrivate4
End Sub

Private Sub CallPrivate4()
  Dim StrSQL As String
'サブフォームのレコードセットのSQL文を代入する
  Dim MyName As Variant
'アクティブコントロール名を歳入する変数
  Dim MyVariable As String
'フォーム上で取得した変数名
'DCount関数のレコード数を代入する変数
  
'アクティブなコントロール名を取得する
  MyName = Me.ActiveControl.Name
'初期化
  MyCount = 0
  
'SQL文の条件句の分岐条件をSELECT CASE文で対応して簡素化する
  Select Case MyName

    Case "txt単価契約品名検索"
      MyVariable = " WHERE 単価契約.品名 LIKE '*" & [Forms]![MAIN購買依頼]![txt単価契約品名検索] & "*' ;"
      
'txt品目検索に該当するレコード数をカウントする
    MyCount = DCount("品名", "単価契約", "品名 like '*" & [Forms]![MAIN購買依頼]![txt単価契約品名検索] & "*'")
    
    Case "Cmd解除"
      MyVariable = " ;"
      
'全レコード数をカウントする
    MyCount = DCount("品名", "単価契約")
  End Select
  
'サブフォームのレコードソースに代入するSQL文
  StrSQL = "SELECT * FROM 単価契約 " & MyVariable
  
'SQL文をサブフォームのレコードソースに代入する
  Me.Sub購買依頼.Form.RecordSource = StrSQL

'サブフォームを再表示させる処理
  Forms![MAIN購買依頼]![Sub購買依頼].Form.Requery
  Me.txt件数.Value = MyCount

End Sub

Private Sub ComboBoxInit()
'コンボボックスの初期化
  Dim Ctl As Control

   For Each Ctl In Me.Controls

      With Ctl
        
'以下のIf文の説明内容
'Or演算子よりAndの演算子が優先されるので
'Or演算子の計算を先にさせるため、括弧で括っておく。
'でないと、コンボboxで選択した項目が以下のif文でtrueとなり
'コンボboxをnull値を代入してしまうため。
        
'IF文の内容は以下の通り
'コンボboxもしくはテキストboxである時、←これが優先事項なので括弧で括る。
'尚且つアクティブなコントロール名と一緒でない
        
'演算子の優先順位により論理的に正しくても
'得られる結果が違ってくる場合がある
        
        '例
        ' 3 - 2 * 5 = 7
        '(3 - 2 )* 5 = 5
'数学的に説明すると掛算と足算、引算が混載する場合は掛算や割算が優先される
'割算、掛算が混載する場合は左側から計算される。 足算、引算はその後になります。
'これを四則演算の法則といい、VBAのOR,AND等にも当てはまりますので
'ANDとORの演算子が混在するときでORを先に計算するときは括弧で括る。
        
        If (.ControlType = acComboBox Or .ControlType = acTextBox) And _
          .Name <> Me.ActiveControl.Name Then
'コンボボックスをNULL(空)に設定(アクティブコントロール以外)
          .Value = Null
        End If
      End With
  Next Ctl
End Sub

Sub ラベル情報()
'  商品名lbl.Caption = 商品コードcmb.Column(1)
'  商品区分説明lbl.Caption = DLookup("[説明]", "商品区分T", "[区分コード]=" & 商品コードcmb.Column(2))
'  Me.lblR3番号.Caption = DLookup("[R/3コード]", "X0001GL勘定", "[R/3コード]=" & [MainGL勘定Pr]![SubGL勘定].Column(3))
  Me.txtR3番号.Value = DLookup("[R/3コード]", "X0001GL勘定", [Forms]![MainGL勘定Pr]![小区分名称])
End Sub


Private Sub Cmd最後_Click()
  Forms!MainGL勘定Pr.SetFocus
  Forms!MainGL勘定Pr!X0001GL勘定.SetFocus
  DoCmd.GoToRecord , , acLast
End Sub

Private Sub Cmd次_Click()
  Forms!MainGL勘定Pr.SetFocus
  Forms!MainGL勘定Pr!X0001GL勘定.SetFocus
  DoCmd.GoToRecord , , acNext
End Sub

Private Sub Cmd先頭_Click()
  Forms!MainGL勘定Pr.SetFocus
  Forms!MainGL勘定Pr!X0001GL勘定.SetFocus
  DoCmd.GoToRecord , , acFirst
End Sub

Private Sub Cmd前_Click()
  Forms!MainGL勘定Pr.SetFocus
  Forms!MainGL勘定Pr!X0001GL勘定.SetFocus
  DoCmd.GoToRecord , , acPrevious
End Sub

612 hits

【12834】サブフォームの抽出結果をメインフォームに表示させたい rinrin 15/5/26(火) 21:22 質問[未読]
【12835】Re:サブフォームの抽出結果をメインフォー... かるびの 15/5/28(木) 2:00 回答[未読]
【12836】Re:サブフォームの抽出結果をメインフォー... hatena 15/5/28(木) 15:08 回答[未読]
【12837】Re:サブフォームの抽出結果をメインフォー... かるびの 15/5/29(金) 0:07 発言[未読]
【12838】Re:サブフォームの抽出結果をメインフォー... rinrin 15/5/29(金) 23:18 お礼[未読]

472 / 9994 ←次へ | 前へ→
ページ:  ┃  記事番号:
1078188
(SS)C-BOARD v3.8 is Free