Access VBA質問箱 IV

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

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


18 / 2271 ツリー ←次へ | 前へ→

【13285】Accessフォーム内のプロパティを検索 かけだしパパ 19/4/9(火) 22:41 質問[未読]
【13286】Re:Accessフォーム内のプロパティを検索 亀マスター 19/4/10(水) 19:06 回答[未読]
【13287】Re:Accessフォーム内のプロパティを検索 かけだしパパ 19/4/13(土) 23:31 お礼[未読]

【13285】Accessフォーム内のプロパティを検索
質問  かけだしパパ  - 19/4/9(火) 22:41 -

引用なし
パスワード
   環境:windows10+Access2013
他者が開発した稼働中のMDBシステム

例えば、フォームにテキストボックス「消費税」があり、そのテキストボックスのプロパティ「コントロールソース」に消費税率を含む下記のような式を記述があったとします。
=合計金額*0.08
このような「コントロールソース」に含まれる"0.08"の文字列を、プロシージャ内の検索にある「カレント プロジェクト」のようにMDBファイル内に存在するすべてのフォーム内の、コントロールのコントロールソース内の式を検索して見つけ出す方法はないでしょうか?

データベース構造の解析>テキストファイル等でエクスポートするとページ数が多く、作業効率が悪いので別な手段はないでしょうか?

【13286】Re:Accessフォーム内のプロパティを検索
回答  亀マスター  - 19/4/10(水) 19:06 -

引用なし
パスワード
   こんな感じでどうでしょう。
開いていないフォームのコントロールにはアクセスできないので、
まずCurrentProject.AllFormsでデータベースファイル中の全ての
オブジェクトを抽出するところから始めています。

Sub test()

Dim f As AccessObject
Dim c As Control

'データベース上の全てのオブジェクトから
For Each f In CurrentProject.AllForms
  'フォームを見つけ
  If f.Type = acForm Then
    'そのフォームを開き
    DoCmd.OpenForm f.Name
    'フォーム中のコントロールから
    For Each c In Forms(f.Name).Controls
      'テキストボックスを見つけ
      If c.ControlType = acTextBox Then
        'そのコントロールソースに「0.08」を含んでいたら
        If InStr(c.ControlSource, "0.08") <> 0 Then
          'イミディエイトウィンドウにフォーム名と
          'テキストボックス名とコントロールソース式を出力
          Debug.Print f.Name & ":" & c.Name ":" & c.ControlSource
        End If
      End If
    Next c
    DoCmd.Close acForm, f.Name
  End If
Next f

End Sub

ここではイミディエイトウィンドウに結果を出力していますが、ここはテキストファイルに出力するなと、Replaceで「0.08」を「0.1」に置換するなと、必要に応じて変更してください。

【13287】Re:Accessフォーム内のプロパティを検索
お礼  かけだしパパ  - 19/4/13(土) 23:31 -

引用なし
パスワード
   ご教示ありがとうございます!
この方法でなんとかいけそうです。ありがとうございました。

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