Shizuku Blog ~ techbank.jp版~

~女性エンジニア けろ-みおの苦悩~

ログイン | ID登録 | ヘルプ


ニュース


当Blogにについて

当Blogは、けろ-みおが備忘録として活用しているBlogになります。掲載している内容について、必ずしも正しい情報を公開しているわけではありませんので予めご了承下さい。
当Blogで公開している記事に対して、質問がある場合は、techbank.jp掲示板でお問い合わせ頂くか、techbank.jp ID申請を行い、IDを作成した段階で当Blogにコメントする等してください。
原則、正体がわからない方からのBlogコメント欄を使ったご質問・ご指摘は、承っておりません。
コメント投稿・公開(承認)基準につきましては、 当Blogのコメント投稿についてをご確認ください。
テクニカルコミュニティ(techbank.jp)に設置しているBlogということもあり、皆様のご理解とご協力の程、宜しくお願いします。

自己紹介

けろ-みおと申します。「techbank.jp」の副管理人をやっております。

MVP Profile

0







けろ-みおの関連サイト





このBlogの人気度
フィードメーター - techbank.jpコミュニティ

techbank.jp Blog全体と近いBlog
あわせて読みたいブログパーツ

このBlogと近いBlog
あわせて読みたいブログパーツ

Blog購読者数
スカウター : techbank.jp







[Access] : MDB内で定義されているすべてのフォームと定義コントロールのすべてのプロパティ値をExcelに出力する方法

 

MDBファイルに定義されているすべてのフォームとそのフォームに定義されている各コントロール&プロパティ情報をExcelで出力する方法です。

こんなことやりたいという人がいるかわかりませんが、Access MDBの構造調査したり、データのマッピング状況を確認するレベルなら使えると思います。

ただし、定義しているフォーム数やコントロール数が多いと、使用しているExcelのバージョンによっては、件数オーバーで出力できなくなりますのでご注意下さい。

 

手順1:MDB内に下記のようなワークテーブル(使用フォーム一覧)を作成します。

id (オートナンバー型)
フォーム名(テキスト型 255桁)
コントロール名(テキスト型 255桁)
プロパティ名(テキスト型 255桁)
プロパティ値(メモ型)

手順2:作成したワークテーブルに対する、下記の追加クエリを「使用フォーム一覧作成」という名前で作成します。

PARAMETERS formname Text ( 255 ), controlname Text ( 255 ), propertyname Text ( 255 ), propertyvalue Text ( 255 );
INSERT INTO 使用フォーム一覧 ( フォーム名, コントロール名, プロパティ名, プロパティ値 )
SELECT [formname] AS 式1, [controlname] AS 式2, [propertyname] AS 式3, [propertyvalue] AS 式4;
    

手順3:同様にワークテーブルに対する、下記の削除クエリを「使用フォーム一覧削除」という名前で作成します。

DELETE * FROM 使用フォーム一覧;

 

手順4:VBAモジュールに下記のコードを追加します。

Option Compare Database

Public Sub DefFormToTextFile()

    Dim item As AccessObject
    Dim formName As String
    Dim f As Form
    Dim c As Control
    Dim p As Property
    Dim propFlag As Boolean

    Dim adocon  As adodb.Connection
    Dim adoprm  As adodb.Parameter
    Dim adocom  As adodb.Command

    Set adocon = CurrentProject.Connection

    DoEvents

    ' 前回実行結果削除
    Set adocom = New adodb.Command
    Set adocom.ActiveConnection = adocon

    adocom.CommandText = "使用フォーム一覧削除"

    adocom.Execute

    Set adocom = Nothing

    ' ワークテーブル実行
    For Each item In Application.CurrentProject.AllForms

        formName = item.Name
    
        DoCmd.OpenForm formName, acDesign, , , , acHidden
    
        Set f = Forms(formName)
    
    
        For Each c In f.Controls
    
            ' コントロールのタイプから詳細を出力するか振り分ける
            propFlag = False
        
            Select Case c.ControlType
        
                Case acCheckBox
        
                    propFlag = True
        
                Case acComboBox
        
                    propFlag = True
        
                Case acListBox
        
                    propFlag = True
        
                Case acTextBox
        
                    propFlag = True
        
            End Select
    
            ' プロパティ列挙対象のコントロールの場合
            If propFlag Then
    
                ' プロパティの列挙
                For Each p In c.Properties
            
                   'トランザクションスタート
                    adocon.BeginTrans
                
                    Set adocom = New adodb.Command
                
                    Set adocom.ActiveConnection = adocon
                
                    adocom.CommandText = "使用フォーム一覧作成"
                
                    Set adoprm = adocom.CreateParameter("formname", adVarChar, adParamInput, 255, formName)
                
                    adocom.Parameters.Append adoprm
                
                    Set adoprm = adocom.CreateParameter("controlname", adVarChar, adParamInput, 255, c.Name)
                
                    adocom.Parameters.Append adoprm
                
                    Set adoprm = adocom.CreateParameter("propertyname", adVarChar, adParamInput, 255, p.Name)
                
                    adocom.Parameters.Append adoprm
                
                    On Error Resume Next
        
        
                    Set adoprm = adocom.CreateParameter("propertyvalue", adVarChar, adParamInput, 10000, p.Value)
                
                    adocom.Parameters.Append adoprm
        
        
                    If Err.number <> 0 Then
                
                        Set adoprm = adocom.CreateParameter("propertyvalue", adVarChar, adParamInput, 10000, "")
                
                        adocom.Parameters.Append adoprm
            
                    End If
        
                    Err.Clear
        
                    On Error GoTo 0
        
                    Set adoprm = Nothing
        
                    adocom.Execute
        
                    adocon.CommitTrans
        
                    Set adocom = Nothing
        
                    DoEvents
        
                Next p
    
            End If
    
        Next c
    
    
        DoCmd.Close acForm, formName

    Next item

     ' ワークテーブルを閉じる
    Set adocom = Nothing

    adocon.Close

     ' Excel出力
    DoCmd.OutputTo acOutputTable, _
	    "使用フォーム一覧", _
	    acFormatXLS, _
	    "c:\work\AccessFormControlList.xls"

End Sub

手順5:必要に応じてExcel出力先を変更します。(「c:\work\AccessFormControlList.xls」の部分)

 

手順6:VBAエディタから、「DefFormToTextFile」マクロを実行すれば完成です。

 

もし、出力件数が多すぎた場合は、マクロコード内でフィルタリングするよう対応してください。

また、件数が多すぎて、Excelの出力エラーが発生した場合は、「DoCmd.OutputTo acOutputTable」の処理を削除し、

結果をワークテーブルに保存するだけにとどめておいてください。

(ワークテーブルにさえ溜めておけば、後の対応はいくらでもできますので・・・)

 

ふぅ、このツールを作成したのは良いものの、益々、AccessとVBAが嫌いになりそうです・・・ 

Published 2009年1月22日 11:36 けろ-みお
分類: ,

コメント

このBlogに対するコメントはありません

コメントを残す

(必須) 
(必須) 
(オプション)
(必須)