質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

Q&A

解決済

2回答

1558閲覧

Accessフォームのデータタブのコントロールソースの値をテキスト出力したい

kamiyui_bidan

総合スコア47

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

VBScript

VBScript(Visual Basic Scripting Edition)はMicrosftが開発したスクリプト言語であり、Visual Basicのサブセットです。

0グッド

0クリップ

投稿2018/11/26 01:33

https://teratail.com/questions/140150
において他のAccessファイルのマクロをテキスト化する方法は
分かったのですが、似たような方法でフォームのデータタブの
コントロールソースの値をテキスト出力する方法は
ありますでしょうか?

宜しくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

とりあえず指定したデータベースファイルの全フォームのコントロールのコントロールソースをイミディエイトウィンドウに出力するコード例です。

vba

1Sub ExportControlsource() 2 3 Dim strDB As String 4 strDB = "C:\TEST\テスト.accdb" 5 6 Dim appAccess As Access.Application 7 Set appAccess = CreateObject("Access.Application") 8 '対象のAccessデータベースを開く 9 appAccess.OpenCurrentDatabase strDB 10 11 '全フォームを参照する 12 Dim acObj As AccessObject 13 For Each acObj In appAccess.CurrentProject.AllForms 14 'フォームをデザインビュー/非表示で開く 15 appAccess.DoCmd.OpenForm acObj.Name, acDesign, , , , acHidden 16 Debug.Print "フォーム名: " & acObj.Name 17 Debug.Print "コントロール名 / コントロールソース" 18 19 'フォーム上の全コントロールの参照 20 On Error Resume Next 'ControlSourceがない場合エラーになるのを無視する 21 Dim acCtl As Access.Control 22 For Each acCtl In appAccess.Forms(acObj.Name).Controls 23 Debug.Print acCtl.Name & " / " & acCtl.ControlSource 24 Next 25 On Error GoTo 0 26 appAccess.DoCmd.Close acForm, acObj.Name, acSaveNo 27 Next 28 appAccess.CloseCurrentDatabase 29 appAccess.Quit 30 Set appAccess = Nothing 31 32 MsgBox "処理終了" 33End Sub

テキストに出力する場合は、下記のリンク等をご参考に。

エクセルVBAでテキストファイルに書き出す最も簡単なプログラム

投稿2018/11/26 06:54

編集2018/11/29 02:44
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kamiyui_bidan

2018/11/28 10:41 編集

ご回答ありがとうございます。 上記コードのパスを、調査対象のパスに変えて実行してみたところ、サブフォームが無いフォームではうまくいくのですが、サブフォームがあるフォームですと、 DoCmd.Close acForm, "acObj.Name, acSaveNo" を実行しているのに(""無しバージョンでも改善されず) appAccess.DoCmd.OpenForm acObj.Name, acDesign, , , , acHidden の所で「実行時エラー 7784 選択したオブジェクトは、サブフォームまたはサブレポートとしてデザインモードで既に開かれています。~」が発生します。 回避方法はありますでしょうか?
hatena19

2018/11/28 09:49

「実行してみたところ」って何を実行したのか不明なのですが、 どちらにしても、サブフォームや帳票フォーム等の連結フォームは使用していないと思います。非連結フォームに表レイアウトにあるようにコントロールを配置していると思われます。でないと、ドラッグ& ドロップは不可能。 また、動的にコントロールを配置するのではなく設計時に必要数のコントロールを配置しておいて、必要に応じて表示、移動する設計にすべきだと思います。(そうすればデザインビューでなくても可能。) 動画ではどのようにしているのか、ソースがないので、推測でしてないですし、どのようにしているのか私にはわからない部分もあります。
kamiyui_bidan

2018/11/29 02:10

>「実行してみたところ」って何を実行したのか不明 「教えていただいたコードのファイルパスをこちらの環境に合わせて、VBAを実行」の意味でした。 >サブフォームや帳票フォーム等の連結フォームは使用していないと思います。 サブフォームのレコードソースにSelect文が設定されてるので、「連結されている」って認識でいいでしょうか? 因みに手動で親フォームを開いて、そのまま子フォームを開こうとすると、手動なのでエラーコードは出ないですが、VBA実行時と同じ「選択したオブジェクトは~」メッセージが表示されます。 acSubform という予約語をネットで見つけましたので、これを使って試行してみます。 >移動する設計にすべきだと思います。 既存システムなので、私の方ではどうしようもない状態です(データの取得元変更などの改修の為の調査) >動画 動画とは?
hatena19

2018/11/29 02:25

前のコメントは、別の質問と勘違いしてのコメントでしたので無視してください。
hatena19

2018/11/29 02:43

DoCmd.Close acForm, "acObj.Name, acSaveNo" 上記ののコードが間違ってました。 下記に修正してください。(回答の方も修正しておきました。) appAccess.DoCmd.Close acForm, acObj.Name, acSaveNo
guest

0

"ControlSource/コントロールソース" プロパティから取得できます。

フォームやコントロールの一覧から取得する場合は、以下を参考に。
フォームのコントロール一覧を取得する
Controls オブジェクト (Access)
Forms object (Access)

投稿2018/11/26 02:20

編集2018/11/26 02:32
sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問