Access VBA質問箱 IV

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

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


228 / 2272 ツリー ←次へ | 前へ→

【12464】Access2010で抽出プログラムの構築 rinrin 14/1/18(土) 9:29 質問[未読]
【12465】Re:Access2010で抽出プログラムの構築 hatena 14/1/18(土) 17:43 回答[未読]
【12466】Re:Access2010で抽出プログラムの構築 rinrin 14/1/19(日) 9:33 発言[未読]
【12468】Re:Access2010で抽出プログラムの構築 hatena 14/1/19(日) 18:00 回答[未読]
【12470】Re:Access2010で抽出プログラムの構築 rinrin 14/1/20(月) 18:39 発言[未読]
【12471】Re:Access2010で抽出プログラムの構築 hatena 14/1/20(月) 21:17 回答[未読]
【12476】Re:Access2010で抽出プログラムの構築 rinrin 14/2/1(土) 21:24 お礼[未読]

【12464】Access2010で抽出プログラムの構築
質問  rinrin  - 14/1/18(土) 9:29 -

引用なし
パスワード
   今 Access2010でデータ抽出プログラムを構築しようとしてます。。。

Mainフォームにサブフォームを組み込んで街頭レコードを抽出できるものを構築しようとしてます。。。。。。。
データの抽出ができません。。。。。。。。。。;;

今までXPでAccessをやってました。。。
でも
今回からAccess2010でやってます。。。。。。。
ハッキリ言ってとても難しいです。。。。;;

ご指導お願いします。。。。。。。。。^^
  Dim stCri As String
  Dim MyPublic As String
  Dim MyPublic2 As String
  
Private Sub CmdCancel_Click()
  Me.購買依頼番号.Value = ""
  Me.購買発注番号.Value = ""
  Me.受入番号.Value = ""
  Me.整理番号.Value = ""
  Me.見積番号.Value = ""
  Me.原価センタ.Value = ""
  Me.会社名.Value = ""
  Me.担当者名.Value = ""
  Me.年度 = ""
  
  Forms![Main購買実績]![購買実績一覧].SetFocus
  Me.[購買実績一覧].Form.Filter = stCri
End Sub

Private Sub 会社名_AfterUpdate()
  MyPublic2 = Me.会社名.Value
  Call Call呼出
End Sub

Private Sub 見積番号_AfterUpdate()
  MyPublic2 = Me.見積番号.Value
  Call Call呼出
End Sub

Private Sub 原価センタ_AfterUpdate()
  MyPublic2 = Me.原価センタ.Value
  Call Call呼出
End Sub

Private Sub 購買依頼番号_AfterUpdate()
  MyPublic2 = Me.購買依頼番号.Value
  Call Call呼出
End Sub

Public Sub Call呼出()
  On Error Resume Next
  Dim Ctl As Variant
  Dim stCri As String
  
'パブリック変数に選択したコンボBOXの名前を取得
  MyPublic = Me.ActiveControl.Name
  
'このフォーム内のすべてのコントロールを検索
  For Each Ctl In Me.Controls
  With Ctl
    If .ControlType = acComboBox And Ctl.Name <> MyPublic Then
'コントロールの種類がテキストボックスなら値をNULL(空)に設定
    .Value = Null
    End If
  End With
  Next Ctl
  
  stCri = "" & "='" & MyPublic2 & "'"
  Mypublic3 = " WHERE " & "='" & MyPublic2 & "'"
  
  Me.購買実績一覧.Form.Filter = stCri
  Me.購買実績一覧.Form.FilterOn = True
End Sub

Public Sub Call2()
  Dim Ctl As Variant
  
  For Each Ctl In Me.Controls
  With Ctl
    If .ControlType = acComboBox Then
'コントロールの種類がテキストボックスなら値をNull(空)に設定
      .Value = Null
    End If
  End With
  Next Ctl
End Sub

Private Sub 購買発注番号_AfterUpdate()
  MyPublic2 = Me.購買発注番号.Value
  Call Call呼出
End Sub

Private Sub 受入番号_AfterUpdate()
  MyPublic2 = Me.受入番号.Value
  Call Call呼出
End Sub

Private Sub 整理番号_AfterUpdate()
  MyPublic2 = Me.整理番号.Value
  Call Call呼出
End Sub

Private Sub 担当者名_AfterUpdate()
  MyPublic2 = Me.担当者名.Value
  Call Call呼出
End Sub

Private Sub 年度_AfterUpdate()
  MyPublic2 = Me.年度.Value
  Call Call呼出
End Sub

【12465】Re:Access2010で抽出プログラムの構築
回答  hatena  - 14/1/18(土) 17:43 -

引用なし
パスワード
   使ってない変数や関数があったり、無駄なコードがあったり、とても見てられないコードですね。
コードの意味をあまり理解していないのでは。

とりあえず、サブフォームのレコードソースの各フィールドのデータ型はなんでしょうか。
それによって条件式の記述が変わってきますので、それを提示してください。


後、提示のコードから下記のようにフォーム設計になっていると推測しましたが、あってますか。

メインフォームは非連結、そこにサブフォームのレコードソースのフィールドと同じ名前の非連結のコンボボックスが配置されている。

コンボボックスを更新したら、そのコンボボックスの名前のフィールドを対象に選択した値でフィルターをかける。

【12466】Re:Access2010で抽出プログラムの構築
発言  rinrin  - 14/1/19(日) 9:33 -

引用なし
パスワード
   ▼hatena さん:
>使ってない変数や関数があったり、無駄なコードがあったり、とても見てられないコードですね。
>コードの意味をあまり理解していないのでは。
何も言い返せないです。。。。。。ごめんなさい。。。。。;;
スキルが至らないことは自覚しております。。。

>
>とりあえず、サブフォームのレコードソースの各フィールドのデータ型はなんでしょうか。
>それによって条件式の記述が変わってきますので、それを提示してください。
下記8個のテーブルをリレーションシップで結合してます。。。


☆購買実績一覧
ID            年度    原価センタWBS要素・指図    取引先    依頼担当者    入庫報告処理
オートナンバー型    数値型    数値型            数値型    数値型        テキスト型
主キー


☆年度日付
ID            入力月日    受入日        SAP納期        発注日付    実納品日
オートナンバー型    日付/時刻型    日付/時刻型    日付/時刻型    日付/時刻型    日付/時刻型
主キー


☆購買番号
ID            購買依頼番号    購買発注書番号    受入番号    整理番号    見積番号
オートナンバー型    テキスト型    テキスト型    テキスト型    テキスト型    テキスト型
主キー


☆金額その他
ID            見積金額    来月繰越    先行発注    備考
オートナンバー型    数値型        テキスト型    テキスト型    テキスト型
主キー


☆原価設定値
ID            原価センタ WBS要素・指図
オートナンバー型    テキスト型
主キー


☆従業員
ID            名前
オートナンバー型    テキスト型
主キー


☆取引先企業
企業番号        企業名        電話番号
オートナンバー型    テキスト型    テキスト型
主キー


☆年度
ID            年度
オートナンバー型         テキスト型
以上です。このような形で取り組もうとしてます。。。いかがでしょうか?ごしどう
>
>
>後、提示のコードから下記のようにフォーム設計になっていると推測しましたが、あってますか。
その通りです。。。
>
>メインフォームは非連結、そこにサブフォームのレコードソースのフィールドと同じ名前の非連結のコンボボックスが配置されている。
>
>コンボボックスを更新したら、そのコンボボックスの名前のフィールドを対象に選択した値でフィルターをかける。

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

【12468】Re:Access2010で抽出プログラムの構築
回答  hatena  - 14/1/19(日) 18:00 -

引用なし
パスワード
   コード中のコンボボックス名とフィールド名が一致しないものがあるし、
実際のクエリでどうなっているのか不明ですが、
とりあえず抽出対象のフィールドのデータ型はすべてテキスト型のようなので、
そうだとして回答します。

メインフォームのモジュールは下記のようになります。

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

  For Each Ctl In Me.Controls
  With Ctl
    If .ControlType = acComboBox And _
      .Name <> Me.ActiveControl.Name Then
'コンボボックスをNULL(空)に設定(アクティブコントロール以外)
    .Value = Null
    End If
  End With
  Next Ctl

End Sub

Private Sub CmdCancel_Click()
  ComboBoxInit
  Me.[購買実績一覧].SetFocus
  Me.[購買実績一覧].Form.Filter = ""
  Me.[購買実績一覧].Form.FilterOn = False
End Sub

Public Finction SetFilter()
  Dim stCri As String

  ComboBoxInit

  With Me.AciveControl
    stCri = .Name & "='" & .Value & "'"
  End With
  
  Me.購買実績一覧.Form.Filter = stCri
  Me.購買実績一覧.Form.FilterOn = True
End Finction


メインフォームのデザインビューでコンボボックスを全て選択した状態で、
「更新後処理」プロパティ欄に

=SetFilter()

と設定します。

以上でどうでしょうか。

【12470】Re:Access2010で抽出プログラムの構築
発言  rinrin  - 14/1/20(月) 18:39 -

引用なし
パスワード
   hatenaさん

お忙しい中いろいろ教えてくれてありがとうございます。。。。。。^^
あたしなりに必死に何とかして。。。ってがんばってはいるんですけど。。。。。。。;;

求める状態には至りません。。。。。。;;

サブフォームで抽出ができないんです。。。。。。;;

まだまだあきらめません。。。。。^^
経過報告させていただきます。。。。^^

今日までにあがいたソースコードです。。。。。^^


  Dim stCri As String
  Dim MyPublic As String
  Dim MyPublic2 As String


Private Sub 購買依頼番号_AfterUpdate()
  MyPublic2 = Me.購買依頼番号.Value
  Call Call呼出
End Sub

Public Sub Call呼出()
  On Error Resume Next
  Dim Ctl As Variant
  Dim stCri As String
  
'パブリック変数に選択したコンボBOXの名前を取得
  MyPublic = Me.ActiveControl.Name
  
'このフォーム内のすべてのコントロールを検索
  For Each Ctl In Me.Controls
  With Ctl
    If .ControlType = acComboBox And Ctl.Name <> MyPublic Then
'コントロールの種類がテキストボックスなら値をNULL(空)に設定
    .Value = Null
    End If
  End With
  Next Ctl
  
  stCri = "" & "='" & MyPublic2 & "'"
  Mypublic3 = " WHERE " & "='" & MyPublic2 & "'"
  
  Me.購買実績一覧.Form.Filter = stCri
  Me.購買実績一覧.Form.FilterOn = True
End Sub

  
Private Sub CmdCancel_Click()
  Me.購買依頼番号.Value = ""
  Me.購買発注番号.Value = ""
  Me.受入番号.Value = ""
  Me.整理番号.Value = ""
  Me.見積番号.Value = ""
  Me.原価センタ.Value = ""
  Me.会社名.Value = ""
  Me.担当者名.Value = ""
  Me.年度 = ""
  
  ComboBoxInit
  Forms![Main購買実績]![購買実績一覧].SetFocus
  Me.[購買実績一覧].Form.Filter = ""
  Me.[購買実績一覧].Form.FilterOn = False
End Sub


Private Sub ComboBoxInit()
'コンボボックスの初期化
  Dim Ctl As Control
  
  For Each Ctl In Me.Controls
  With Ctl
    If .ControlType = acComboBox And _
      .Name <> Me.ActiveControl.Name Then
'コンボボックスをNULL(空)に設定(アクティブコントロール以外)
      .Value = Null
    End If
  End With
  Next Ctl
End Sub

Public Function SetFilter()
'メインフォームのデザインビューでコンボボックスをすべて選択した状態で、「更新後処理」プロパティ欄に=SetFilterと設定
  Dim stCri As String
  
  ComboBoxInit
  
  With Me.ActiveControl
    stCri = .Name & .Value & "'"
  End With
  
  Me.購買実績一覧.Form.Filter = stCri
  Me.購買実績一覧.Form.FilterOn = True
End Function


▼hatena さん:
>コード中のコンボボックス名とフィールド名が一致しないものがあるし、
>実際のクエリでどうなっているのか不明ですが、
>とりあえず抽出対象のフィールドのデータ型はすべてテキスト型のようなので、
>そうだとして回答します。
>
>メインフォームのモジュールは下記のようになります。
>
>Private Sub ComboBoxInit()
>'コンボボックスの初期化
>  Dim Ctl As Controlt
>
>  For Each Ctl In Me.Controls
>  With Ctl
>    If .ControlType = acComboBox And _
>      .Name <> Me.ActiveControl.Name Then
>'コンボボックスをNULL(空)に設定(アクティブコントロール以外)
>    .Value = Null
>    End If
>  End With
>  Next Ctl
>
>End Sub
>
>Private Sub CmdCancel_Click()
>  ComboBoxInit
>  Me.[購買実績一覧].SetFocus
>  Me.[購買実績一覧].Form.Filter = ""
>  Me.[購買実績一覧].Form.FilterOn = False
>End Sub
>
>Public Finction SetFilter()
>  Dim stCri As String
>
>  ComboBoxInit
>
>  With Me.AciveControl
>    stCri = .Name & "='" & .Value & "'"
>  End With
>  
>  Me.購買実績一覧.Form.Filter = stCri
>  Me.購買実績一覧.Form.FilterOn = True
>End Finction
>
>
>メインフォームのデザインビューでコンボボックスを全て選択した状態で、
>「更新後処理」プロパティ欄に
>
>=SetFilter()
>
>と設定します。
>
>以上でどうでしょうか。

【12471】Re:Access2010で抽出プログラムの構築
回答  hatena  - 14/1/20(月) 21:17 -

引用なし
パスワード
   前回の回答のコードですべて完結しています。

現状のフォームのコードは
先頭の
Option Compare Database
Option Explicit
を残してすべて削除して、

12468 のコードをそのあとに貼り付けてください。

その上で、
メインフォームのデザインビューでコンボボックスを全て選択した状態で、
「更新後処理」プロパティ欄に

=SetFilter()

と設定します。

以上で動作するはずです。

【12476】Re:Access2010で抽出プログラムの構築
お礼  rinrin  - 14/2/1(土) 21:24 -

引用なし
パスワード
   hatenaさん
ホントにありがとうございました。。。。。。。

▼hatena さん:
>前回の回答のコードですべて完結しています。
>
>現状のフォームのコードは
>先頭の
>Option Compare Database
>Option Explicit
>を残してすべて削除して、
>
>12468 のコードをそのあとに貼り付けてください。
>
>その上で、
>メインフォームのデザインビューでコンボボックスを全て選択した状態で、
>「更新後処理」プロパティ欄に
>
>=SetFilter()
>
>と設定します。
>
>以上で動作するはずです。

228 / 2272 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
1080765
(SS)C-BOARD v3.8 is Free