解析ツール.accdb

 

 
frm_Main:

 

 

 
Option Compare Database
Option Explicit
Public PTH As Variant
Private Sub cmd_Quit_Click()
    '作成者:瀧澤禮好
    '作成日:2019/01/06
    '変更日:2019/01/08
    '
    Dim SQL_STR As String
    DoCmd.SetWarnings False
    
    SQL_STR = "DELETE Usys_Objects.* FROM Usys_Objects;"
    DoCmd.RunSQL SQL_STR, -1
    
    SQL_STR = "DELETE Usys_Query.* FROM Usys_Query;"
    DoCmd.RunSQL SQL_STR, -1
    
    DoCmd.Quit acQuitSaveAll
    Exit Sub
End Sub

 
Private Sub cmd_ReTry_Click()
    '作成者:瀧澤禮好
    '作成日:2019/01/09
    '変更日:2019/01/11
    '
    On Error GoTo Error_Task
    Dim Len_PTH As Variant
    
    PTH = Me.txt_PTH
    
    If IsNull(PTH) = True Then
        Exit Sub
    Else
        Len_PTH = Len(PTH)
        
        '対象AccessファイルのMSysObjectsを名前を変えてハードリンク
        If Create_Link_Table(PTH, "MSysObjects", "USys_Get_Objects") = False Then
            MsgBox "エラーが発生しました!", 16, "txt_PTH_DblClick"
            Exit Sub
        Else
        End If
        
        'オブジェクトの一覧を取得(テーブル、クエリ、フォーム、レポート、モジュール、マクロ、リンク等)
        Call Make_Usys_Objects
        '
        'クエリの名前を取得してテーブルに転記、SQLプロパティを取得してテーブルに転記
        Call Make_Usys_Query
    End If
    '必要なデータを取得したら、リンクを解除
    
    DoCmd.DeleteObject acTable, "USys_Get_Objects"
    MsgBox "解析完了!", 64, "cmd_ReTry_Click"
    Exit Sub
Error_Task:
    DoCmd.DeleteObject acTable, "USys_Get_Objects"
    MsgBox "解析完了エラー!", 16, "cmd_ReTry_Click"
    Exit Sub
End Sub

 
Private Sub cmd_オブジェクト一覧_Click()
    '作成者:瀧澤禮好
    '作成日:2019/01/11
    '変更日:2019/01/11
    '
    If IsNull(Me.txt_Export_PTH) = True Then
        MsgBox "「エクスポート先」が空白です!", 16, ""
        Exit Sub
    End If
    Dim PTH As String
    Dim chk As String
    
    PTH = Me.txt_Export_PTH
    
    Call Folder_Look_Up(PTH)
    
    If Right(PTH, 1) = "\" Then
    Else
        PTH = PTH & "\"
    End If
    
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "オブジェクト一覧", PTH & "オブジェクト一覧_" & Time_Stamp_Get & ".xlsx", False, ""
    MsgBox "「" & PTH & "オブジェクト一覧_" & Time_Stamp_Get & ".xlsx」にエクスポートしました。", 64, "cmd_オブジェクト一覧_Click"
    Exit Sub
End Sub

 
Private Sub cmd_クエリ一覧_Click()
    '作成者:瀧澤禮好
    '作成日:2019/01/11
    '変更日:2019/01/11
    '
    If IsNull(Me.txt_Export_PTH) = True Then
        MsgBox "「エクスポート先」が空白です!", 16, ""
        Exit Sub
    End If
    Dim PTH As String
    Dim chk As String
    
    PTH = Me.txt_Export_PTH
    
    Call Folder_Look_Up(PTH)
    
    If Right(PTH, 1) = "\" Then
    Else
        PTH = PTH & "\"
    End If
    
    DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "クエリ一覧", PTH & "クエリ一覧_" & Time_Stamp_Get & ".xlsx", False, ""
    MsgBox "「" & PTH & "クエリ一覧_" & Time_Stamp_Get & ".xlsx」にエクスポートしました。", 64, "cmd_クエリ一覧_Click"
    Exit Sub
End Sub

 
Private Sub Form_Load()
    '作成者:瀧澤禮好
    '作成日:2019/01/12
    '変更日:2019/01/12
    '
    DoCmd.OpenForm "frm_BGF", acNormal, "", "", , acHidden
    Exit Sub
End Sub

 
Private Sub txt_Export_PTH_DblClick(Cancel As Integer)
    '作成者:瀧澤禮好
    '作成日:2019/01/11
    '変更日:2019/01/11
    '
    Me.txt_Export_PTH = FDFolderPicker
    
    Exit Sub
End Sub

 
Private Sub txt_PTH_DblClick(Cancel As Integer)
    '作成者:瀧澤禮好
    '作成日:2019/01/06
    '変更日:2019/01/11
    '
    
    Dim Len_PTH As Variant
    On Error GoTo Error_Task
    
    Me.txt_PTH = FDFilePicker(3)
    PTH = Me.txt_PTH
    
    If IsNull(PTH) = True Then
        Exit Sub
    Else
        Len_PTH = Len(PTH)
        
        '対象AccessファイルのMSysObjectsを名前を変えてハードリンク
        If Create_Link_Table(PTH, "MSysObjects", "USys_Get_Objects") = False Then
            MsgBox "エラーが発生しました!", 16, "txt_PTH_DblClick"
            Exit Sub
        Else
        End If
        
        'オブジェクトの一覧を取得(テーブル、クエリ、フォーム、レポート、モジュール、マクロ、リンク等)
        Call Make_Usys_Objects
        '
        'クエリの名前を取得してテーブルに転記、SQLプロパティを取得してテーブルに転記
        Call Make_Usys_Query
    End If
    '必要なデータを取得したら、リンクを解除
    
    DoCmd.DeleteObject acTable, "USys_Get_Objects"
    MsgBox "解析完了!", 64, "txt_PTH_DblClick"
    Exit Sub
Error_Task:
    DoCmd.DeleteObject acTable, "USys_Get_Objects"
    MsgBox "解析完了エラー!", 16, "txt_PTH_DblClick"
    Exit Sub
End Sub
Function Get_SQL_ST(Q_Name As String) As String
    '作成者:瀧澤禮好
    '作成日:2019/01/07
    '変更日:2019/01/07
    'クエリのSQLを取得
    
    
    Get_SQL_ST = CurrentDb.QueryDefs(Q_Name).SQL
    Exit Function
End Function

 
frm_BGF:

 
SQLプロパティが欠落する事象を解決するために、テーブルに書き込む事を止め、テキストボックスに出力し、
そのテキストボックスから改めてテーブルに上書きする事で、総てのSQLステートメントを取得する事に成功した。

 

 

 
frm_Get_Feeld:

 

 
※このフォームは、解析対象のAccessファイルにインポートして操作する。
※テーブルの解析のロジックは、総てこのフォームのクラスモジュールに記述してある。

 

 

 

 
Option Compare Database
Option Explicit

 
Private Sub cmd_Get_Feeld_Click()
    '作成者:瀧澤禮好
    '作成日:2019/01/12
    '変更日:2019/01/13
    '
    'テーブルのフィールド定義を取得
    
    If IsNull(Me.txt_Book_Name) Then
        MsgBox "ブック名が空白です!", 16, ""
        Exit Sub
    End If
    
    On Error Resume Next
    DoCmd.SetWarnings False
    
    Dim myQuery As DAO.QueryDef
    Dim SQL_STR As String
    Dim T_CNT As Long
    Dim cnt As Long
    Dim myDB As DAO.Database
    Dim myTD As DAO.TableDef
    Dim myFeeld As DAO.Field
    Dim myIndex As DAO.Index
    Dim Feeld_Name As String
    Dim Feeld_Type As Integer
    Dim Feeld_Index As Boolean
    Dim Feeld_I As Variant
    Dim PTH As String
    Dim Book_Name As String
    Dim Sheet_Name As String
    Dim BN As Integer
    Dim TS As String
    
    TS = Format(Now(), "yyyymmddhhnnss")
    
    BN = Len(CurrentProject.Name)
    PTH = CurrentProject.Path & "\"
    
    Me.txt_Book_Name = CurrentProject.Name
    
    Dim PTH_Len As Integer 'フルパスの長さ
    Dim COMMA_Point As Integer 'コンマの位置
    Dim PTH_Point As Integer '拡張子の長さ
    Dim PTH_OUT As String '拡張子の格納先

 
    PTH_Len = Len(Me.txt_Book_Name) 'フルパスの長さ取得
    COMMA_Point = InStr(CurrentProject.Name, ".") 'カンマの位置を右から走査して取得
    PTH_Point = PTH_Len - (BN - COMMA_Point + 1) 'フルパスの長さからコンマ位置を差し引く
    PTH_OUT = Left(Me.txt_Book_Name, PTH_Point) '右からフルパスの長さからコンマ位置を差し引いた文字文取得
    
    Book_Name = PTH_OUT & "_フィールド定義_" & TS
    
    DoCmd.SetWarnings False
    SQL_STR = "DELETE Get_Name.* FROM Get_Name;"
    DoCmd.RunSQL SQL_STR, -1
    
    SQL_STR = "INSERT INTO Get_Name ( Name )" _
    & " SELECT MSysObjects.Name" _
    & " FROM MSysObjects " _
    & " WHERE (((MSysObjects.Name) Not Like 'MSys*' And (MSysObjects.Name)<>'tbl_Get_FP' And (MSysObjects.Name)<>'Get_Name' And (MSysObjects.Name)<>'tbl_DAO_Field_Object_TypePro') AND ((MSysObjects.Type)=1 Or (MSysObjects.Type)=4 Or (MSysObjects.Type)=6));"
    DoCmd.RunSQL SQL_STR
    
    T_CNT = DCount("Name", "Get_Name")
    
    For cnt = 1 To T_CNT
        
        Me.txt_Table_Name = DLookup("Name", "Get_Name", "ID = " & cnt)
        Sheet_Name = Me.txt_Table_Name & "_解析"
        
        Set myDB = CurrentDb
        Set myTD = myDB.TableDefs(Me.txt_Table_Name)
    
        'フィールド数を取得
        'MsgBox "Testのフィールド数は " & myTD.Fields.Count & " 個です"
    
        'フィールド定義を取得
        SQL_STR = "DELETE tbl_Get_FP.* FROM tbl_Get_FP;"
        DoCmd.RunSQL SQL_STR, -1
        For Each myFeeld In myTD.Fields
            
            Me.txt_Feeld_1 = "" '名前クリア
            Me.txt_Feeld_2 = "" '型クリア
            Me.txt_Feeld_3 = "" 'サイズクリア
            Me.txt_Feeld_1 = myFeeld.Name '名前
            Me.txt_Feeld_2 = myFeeld.Type '型
            Me.txt_Feeld_3 = myFeeld.Size 'サイズ
            
            SQL_STR = " INSERT INTO tbl_Get_FP ( Name, Type,Size)" _
            & " SELECT [Forms]![frm_Get_Feeld]![txt_Feeld_1] AS 式2, [Forms]![frm_Get_Feeld]![txt_Feeld_2] AS 式1, [Forms]![frm_Get_Feeld]![txt_Feeld_3] AS 式3;"
            DoCmd.RunSQL SQL_STR
            
            SQL_STR = " UPDATE tbl_Get_FP INNER JOIN tbl_DAO_Field_Object_TypePro ON tbl_Get_FP.Type = tbl_DAO_Field_Object_TypePro.値 SET tbl_Get_FP.Type_Str = [tbl_DAO_Field_Object_TypePro]![dbxxx];"
            DoCmd.RunSQL SQL_STR
            
        Next
        'インデックスの取得(重複無し)
        For Each myIndex In myTD.Indexes
            If myIndex.Unique = True Then
                For Each myFeeld In myIndex.Fields
                    Me.txt_Index2 = ""
                    Me.txt_Index2 = myFeeld.Name
                    SQL_STR = "UPDATE tbl_Get_FP SET tbl_Get_FP.[Index] = '△'" _
                    & "WHERE (((tbl_Get_FP.Name)=[Forms]![frm_Get_Feeld]![txt_Index2]));"
                    DoCmd.RunSQL SQL_STR
                Next
            End If
        Next
        'インデックスの取得(プライマリキー)
        For Each myIndex In myTD.Indexes
            If myIndex.Primary = True Then
                For Each myFeeld In myIndex.Fields
                    Me.txt_Index = ""
                    Me.txt_Index = myFeeld.Name
                    SQL_STR = "UPDATE tbl_Get_FP SET tbl_Get_FP.[Index] = '○'" _
                    & "WHERE (((tbl_Get_FP.Name)=[Forms]![frm_Get_Feeld]![txt_Index]));"
                    DoCmd.RunSQL SQL_STR
                Next
            End If
        Next
        
        SQL_STR = " SELECT tbl_Get_FP.Name, tbl_Get_FP.Type, tbl_Get_FP.Type_Str, tbl_Get_FP.Index, tbl_Get_FP.Size" _
        & " FROM tbl_Get_FP;"
        Set myQuery = myDB.CreateQueryDef(Sheet_Name, SQL_STR)
        myQuery.SQL = SQL_STR
        
        DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, Sheet_Name, PTH & Book_Name & ".xlsx", True, ""
        
        DoEvents
        
        DoCmd.DeleteObject acQuery, Sheet_Name
        
    Next cnt
End_Task:
    DoCmd.DeleteObject acQuery, Sheet_Name

 
    MsgBox "OK"
End Sub

 
Private Sub cmd_Quit_Click()
    'テーブルのフィールド定義を取得
    '作成者:瀧澤禮好
    '作成日:2019/01/12
    '変更日:2019/01/12
    '
    '
    DoCmd.SetWarnings False
    DoCmd.DeleteObject acTable, "tbl_Get_FP"
    DoCmd.DeleteObject acTable, "Get_Name"
    DoCmd.DeleteObject acTable, "tbl_DAO_Field_Object_TypePro"
    DoCmd.Close acForm, Me.Name
End Sub

 
Private Sub Form_Load()
    'テーブルのフィールド定義を取得
    '作成者:瀧澤禮好
    '作成日:2019/01/12
    '変更日:2019/01/12
    '
    '
    '/********************/テーブル作成/********************/
    Dim DB As DAO.Database
    Dim TD As DAO.TableDef
    Dim A_FL As DAO.Field
    Dim SQL_STR As String
    
    On Error Resume Next
    
    DoCmd.SetWarnings False
    DoCmd.DeleteObject acTable, "tbl_Get_FP"
    DoCmd.DeleteObject acTable, "Get_Name"
    DoCmd.DeleteObject acTable, "tbl_DAO_Field_Object_TypePro"
    
    Set DB = CurrentDb
    Set TD = DB.CreateTableDef("tbl_Get_FP")
    
    TD.Fields.Append TD.CreateField("Name", dbText, 255)
    TD.Fields.Append TD.CreateField("Type", dbLong)
    TD.Fields.Append TD.CreateField("Type_Str", dbText, 255)
    TD.Fields.Append TD.CreateField("Index", dbText, 255)
    TD.Fields.Append TD.CreateField("Size", dbText, 255)
    'TD.Fields.Append TD.CreateField("ID", dbAutoIncrField)
    DB.TableDefs.Append TD
    
    With TD
    Set A_FL = .CreateField("ID", dbLong)
        A_FL.Attributes = dbAutoIncrField
        .Fields.Append Object:=A_FL
    End With
    
    Set A_FL = Nothing
    Set DB = Nothing
    Set TD = Nothing
    
    Set DB = CurrentDb
    Set TD = DB.CreateTableDef("Get_Name")
    
    TD.Fields.Append TD.CreateField("Name", dbText, 255)
    'TD.Fields.Append TD.CreateField("ID", dbLong)
    DB.TableDefs.Append TD
    
    With TD
    Set A_FL = .CreateField("ID", dbLong)
        A_FL.Attributes = dbAutoIncrField
        .Fields.Append Object:=A_FL
    End With
    
    Set A_FL = Nothing
    Set DB = Nothing
    Set TD = Nothing
    
    Set DB = CurrentDb
    Set TD = DB.CreateTableDef("tbl_DAO_Field_Object_TypePro")
    
    TD.Fields.Append TD.CreateField("値", dbLong)
    TD.Fields.Append TD.CreateField("dbxxx", dbText, 255)
    DB.TableDefs.Append TD
    
    With TD
    Set A_FL = .CreateField("ID", dbLong)
        A_FL.Attributes = dbAutoIncrField
        .Fields.Append Object:=A_FL
    End With
    
    Set A_FL = Nothing
    Set DB = Nothing
    Set TD = Nothing
    '/********************/テーブル作成/********************/

 
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (1,'dbBoolean');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (2,'dbByte');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (3,'dbInteger');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (4,'dbLong');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (5,'dbCurrency');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (6,'dbSingle');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (7,'dbDouble');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (8,'dbDate');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (9,'dbBinary');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (10,'dbText');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (11,'dbLongBinary');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (12,'dbMemo');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (15,'dbGUID');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (16,'dbBigInt');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (17,'dbVarBinary');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (18,'dbChar');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (19,'dbNumeric');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (20,'dbDecimal');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (21,'dbFloat');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (22,'dbTime');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (23,'dbTimeStamp');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (101,'dbAttachment');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (102,'dbComplexByte');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (103,'dbComplexInteger');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (104,'dbComplexLong');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (105,'dbComplexSingle');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (106,'dbComplexDouble');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (107,'dbComplexGUID');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (108,'dbComplexDecimal');", -1
    DoCmd.RunSQL " INSERT INTO tbl_DAO_Field_Object_TypePro([値],[dbxxx])  VALUES (109,'dbComplexText');", -1
    
    Exit Sub
End Sub

 
General:

 
Option Compare Database
Option Explicit
Declare Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" ( _
                                                                  ByVal hwnd As Long, _
                                                                  ByVal pszPath As String, _
                                                                  ByVal psa As Long) As Long
Public Function MkFolder(FL As String) As Boolean
    '作成者:瀧澤禮好
    '作成日:2016/07/15
    '変更日:2016/08/18
    '多重層のフォルダ作成
    
    'フォルダの存在確認
    If FSO_PH_Check(FL) = True Then
        MkFolder = True
    Else
        '多重層のフォルダ作成
        Dim rc As Long
        Dim Target As String
        Target = FL
        rc = SHCreateDirectoryEx(0&, Target, 0&)
        If rc = 0 Then
            '正常終了
            MkFolder = True
        Else
            '異常終了
            MkFolder = False
        End If
    End If
    'Get_Error_Data ("MkFolder")
End Function
Public Function Make_Folder(FL As String) As Boolean
    '作成者:瀧澤禮好
    '作成日:2016/07/15
    '変更日:2016/07/27
    '多重層のフォルダ作成
    
    'フォルダの存在確認
    If FSO_PH_Check(FL) = True Then
        Make_Folder = True
    Else
        '多重層のフォルダ作成
        Dim rc As Long
        Dim Target As String
        Target = FL
        rc = SHCreateDirectoryEx(0&, Target, 0&)
        If rc = 0 Then
            '正常終了
            Make_Folder = True
        Else
            '異常終了
            Make_Folder = False
        End If
    End If
    'Get_Error_Data ("Make_Folder")
End Function
Sub Folder_Look_Up(PTH As String)
    '作成者:瀧澤禮好
    '作成日:2019/01/11
    '変更日:2019/01/11
    'フォルダの存在を確認し、存在しない場合は作成する
    
    Dim chk As String
    Dim PTH_Len As Integer
    
    chk = Right(PTH, 1)
    If chk = "\" Then
        PTH_Len = Len(PTH)
        PTH = Left(PTH, (PTH_Len - 1))
    End If
    
    If FSO_PH_Check(PTH) = False Then
        If (MsgBox("「" & PTH & "」は存在しません。" & vbCrLf & "「" & PTH & "」を作成しますか?", 36) = 7) Then
            Exit Sub
        Else
            MkFolder (PTH)
        End If
    End If
End Sub
Public Function PC_Name_Get() As String
    '作成者:瀧澤禮好
    '作成日:2016/02/26
    '変更日:2016/02/26
    'コンピュータ名の取得
    
    Dim PC As String
    PC = Environ("ComputerName") '環境変数の取得
    PC_Name_Get = PC
    'Get_Error_Data ("PC_Name_Get")
End Function
Public Function User_Name_Get() As String
    '作成者:瀧澤禮好
    '作成日:2016/02/26
    '変更日:2016/02/26
    'ユーザー名の取得
    
    Dim User_Name
    User_Name = Environ("UserName") '環境変数の取得
    User_Name_Get = User_Name
    'Get_Error_Data ("User_Name_Get")
End Function
Public Function OS_Name_Get() As String
    '作成者:瀧澤禮好
    '作成日:2016/02/26
    '変更日:2016/02/26
    'OS名の取得
    
    Dim OS_Name
    OS_Name = Environ("OS") '環境変数の取得
    OS_Name_Get = OS_Name
    'Get_Error_Data ("OS_Name_Get")
End Function
Function Get_Time_Stamp(File_Name As String) As String
    '作成者:瀧澤禮好
    '作成日:2016/02/26
    '変更日:2016/02/26
    'ファイルデータスタンプ(更新日時)の取得
    
    Dim GTS As String
    GTS = FileDateTime(File_Name)
    Get_Time_Stamp = GTS
    'Get_Error_Data ("Get_Time_Stamp")
End Function
Function Get_ClipBord0(String_Data As String) As Boolean
    '作成者:瀧澤禮好
    '作成日:2016/02/26
    '変更日:2016/02/26
    'クリップボードにコピー
    
    '※参照設定でFM2.0オブジェクトライブラリをチェックする
    '格納場所(64bit)⇒c:\windows\syswow64\fm20.dll
    
    On Error GoTo Err_Tasc
    
    Dim CB0 As String
    CB0 = String_Data
    With New MSForms.DataObject
        .SetText CB0 '変数の値をオブジェクトに代入
        .PutInClipboard 'クリップボードにコピー
    End With
    Get_ClipBord0 = True
    'Get_Error_Data ("Get_ClipBord0")
    Exit Function
Err_Tasc:
    Get_ClipBord0 = False
    'Get_Error_Data ("Get_ClipBord0")
    Exit Function
End Function
Public Function GetCurBD(BDate As Variant) As Variant
    '作成者:瀧澤禮好
    '作成日:2016/02/26
    '変更日:2016/02/26
    
    '概要 誕生日より今日現在の年齢を計算します
    '引数 BDate : 誕生日
    '返り値 年齢(誕生日がNullのときはNullを返します)

 
    Dim GetBD As Variant

 
    If Not IsNull(BDate) Then
        '引数の誕生日が指定されているとき
        '誕生日と今日の日付の年の差を年齢とする
        GetBD = DateDiff("yyyy", BDate, Date)
        If DateSerial(Year(Date), Month(BDate), Day(BDate)) > Date Then
            'その年の誕生日がまだ来ていないときはマイナス1する
            GetBD = GetBD - 1
        End If

 
    Else
        '引数の誕生日が指定されていないときはNullを設定
        GetBD = Null

 
    End If

 
    '返り値を設定
    GetCurBD = GetBD
    'Get_Error_Data ("GetCurBD")
End Function
Function Make_Fl(Folder As String) As Boolean
    '作成者:瀧澤禮好
    '作成日:2016/02/26
    '変更日:2016/02/26
    'フォルダーの作成
    
    On Error GoTo Error_Task
    
    Dim MFL As String
    Dim ct As Integer
    
    ct = Len(Folder)
    ct = ct - 1
    MFL = Left(Folder, ct)
    
    MkDir (MFL)
    Make_Fl = True
    'Get_Error_Data ("Make_Fl")
    Exit Function
Error_Task:
    Make_Fl = False
    'Get_Error_Data ("Make_Fl")
    Exit Function
End Function
Function Week_Day_Name(WN As Date) As String
    '作成者:瀧澤禮好
    '作成日:2016/02/26
    '変更日:2016/02/26
    '曜日の取得
    
    Dim Week_Name As String
    Week_Name = WeekdayName(Weekday(WN))
    Week_Day_Name = Week_Name
    'Get_Error_Data ("Week_Day_Name")
End Function
Public Function FDFolderPicker()
    '作成者:瀧澤禮好
    '作成日:2016/02/26
    '変更日:2016/02/26
   '[参照] ダイアログ ボックスの FileDialog オブジェクトを作成します。
   
    Dim fd As FileDialog
    
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
   '選択した各アイテムのパスを保存す変数を宣言します。
    Dim vrtSelectedItem As Variant
    
    'プロパティの設定
    With fd
        .Title = "ファイルダイアログ(フォルダ参照)"
        
        .InitialView = msoFileDialogViewDetails
        .InitialFileName = CurrentProject.Path

 
        '[参照] ダイアログ ボックスを表示します。
        If .Show = -1 Then
            'ユーザーがアクション ボタンをクリックした場合
            For Each vrtSelectedItem In .SelectedItems
                FDFolderPicker = vrtSelectedItem
            Next vrtSelectedItem
        Else
           'ユーザーが [キャンセル] をクリックした場合
        End If
    End With

 
    'オブジェクトの変数に Nothing を設定します。
    Set fd = Nothing
    'Get_Error_Data ("FDFolderPicker")
End Function
Public Function FDFilePicker(Kaku As Integer)
    '作成者:瀧澤禮好
    '作成日:2016/02/26
    '変更日:2018/01/06
    
   '[参照] ダイアログ ボックスの FileDialog オブジェクトを作成します。
    Dim fd As FileDialog
    
    Set fd = Application.FileDialog(msoFileDialogFilePicker)
   '選択した各アイテムのパスを保存す変数を宣言します。
    Dim vrtSelectedItem As Variant
    
    'プロパティの設定
    With fd
        .Title = "ファイルダイアログ(ファイル参照)"
        .InitialFileName = CurrentProject.Path
        'フィルターの設定
        .Filters.Clear
        .Filters.Add "テキスト", "*.txt; *.csv"
        .Filters.Add "エクセル", "*.xls;*.xlsx;*.xlsm"
        .Filters.Add "Access", "*.mdb;*.accdb"
        .Filters.Add "イメージ", "*.gif; *.jpg; *.jpeg"
        .Filters.Add "すべてのファイル", "*.*"
        .FilterIndex = Kaku
        
        .InitialView = msoFileDialogViewDetails
        .AllowMultiSelect = False

 
        '[参照] ダイアログ ボックスを表示します。
        If .Show = -1 Then
            'ユーザーがアクション ボタンをクリックした場合
            For Each vrtSelectedItem In .SelectedItems
                FDFilePicker = vrtSelectedItem
            Next vrtSelectedItem
        Else
           'ユーザーが [キャンセル] をクリックした場合
        End If
    End With

 
    'オブジェクトの変数に Nothing を設定します。
    Set fd = Nothing
    'Get_Error_Data ("FDFilePicker")
End Function
Function Hankaku(STR_STR As String) As String
    '参照設定「Microsoft Script Regular Expressions 5.5」
    '正規表現を使って検索、抽出した文字列を返す。
    '作成者:瀧澤禮好
    '作成日:2016/10/09
    '更新日:2016/10/09

 
    On Error Resume Next
    '正規表現で半角文字検索
    Dim strSample
    Dim regPattern
    Dim colMatches
    Dim objMatch
    Dim Seiki_Str As String
    Dim Kekka As String
    
    '正規表現のパターンを設定
    Seiki_Str = "[ -~]+"
    '文字列変数「Kekka」の初期化
    Kekka = ""
    strSample = STR_STR
    Set regPattern = New RegExp
    regPattern.Pattern = Seiki_Str '検索の正規表現
    regPattern.Global = True
    Set colMatches = regPattern.Execute(strSample)
    For Each objMatch In colMatches
        Kekka = Kekka & objMatch
    Next

 
    Dim cn As Long
    cn = Len(Kekka)
    If cn = 0 Then
        Hankaku = "半角文字は見つかりませんでした!"
    Else
        Hankaku = Kekka
    End If

 
    Exit Function
End Function
Sub Re_Conect()
    '作成者:瀧澤禮好
    '作成日:2016/10/31
    '更新日:2016/10/31
    
    On Error GoTo Err_Job
    
    'データMDBにリンクを更新します。
    'リンク更新失敗したら Access終了します。
    '===============================================
    Dim strIniFile As String
    Dim strIniFile_Chk As String
    Dim Kakuchoushi As String
    Dim str_CN_MDB_Name As String
    Dim TBL_RE_CNT As TableDef
    Dim boo_CNT_UP As Boolean
    Dim Pass_Word As String
    
    Pass_Word = ";pwd=" & "ut-kokuzou.jp"
    
    str_CN_MDB_Name = FDFilePicker(5)
    
    strIniFile_Chk = Get_Base_Name(str_CN_MDB_Name)
    Kakuchoushi = "." & Get_kakuchoushi(str_CN_MDB_Name)
    strIniFile_Chk = strIniFile_Chk & Kakuchoushi
    
    If (MsgBox("リンク先MDBは「" & str_CN_MDB_Name & "」です。OKですか??", 36) = 7) Then
        'Get_Error_Data ("Re_Conect")
        Exit Sub
    End If
    
    '接続ファイル名の確認
    
    If strIniFile_Chk = "健康管理記録蓄積be.mdb" Then
        GoTo PSW_CK
        Else
        MsgBox "選択したファイルはリンクMDBではありません!", 48
        'Get_Error_Data ("Re_Conect")
        Exit Sub
    End If
PSW_CK:
    'パスワードの有無
    If (MsgBox("バックエンドにパスワードが付いていますか??", 36) = 7) Then
        
        GoTo CH_CNT
    Else
        Pass_Word = InputBox("パスワードを入力してください!", "Re_Conect", "*****")
        If Pass_Word = "" Then
            GoTo PSW_CK
        End If
        
        Pass_Word = ";pwd=" & Pass_Word
        str_CN_MDB_Name = str_CN_MDB_Name & Pass_Word
    End If
    
    
CH_CNT:
    ' データベースのすべてのテーブルをループします。
    For Each TBL_RE_CNT In CurrentDb.TableDefs
        ' テーブルに接続文字列があるとき
        If Len(TBL_RE_CNT.Connect) > 0 Then
            TBL_RE_CNT.Connect = _
                ";DATABASE=" & str_CN_MDB_Name
            ' テーブルのリンクを更新
            Err = 0
            On Error Resume Next
            TBL_RE_CNT.RefreshLink
            'エラーがあったら
            If Err <> 0 Then
                MsgBox TBL_RE_CNT.Name & _
                        Err.Description, vbCritical, _
                        "リンク更新失敗"
                Application.Quit       'Access終了
            End If
        End If
    Next TBL_RE_CNT
    
    MsgBox "リンク再接続が完了しました!", 64
END_JOB:
    'Get_Error_Data ("Re_Conect")
    Exit Sub
Err_Job:
    MsgBox "システムエラーです!システム担当者に連絡してください!", 16
    'Get_Error_Data ("Re_Conect")
    Exit Sub
End Sub
Function Create_Link_Table(PTH As Variant, Moto_TBL As Variant, Saki_TBL As Variant) As Boolean
    '作成者:瀧澤禮好
    '作成日:2016/10/31
    '更新日:2016/10/31
    
    'PTH リンク元のフルパスのAccessDB名(拡張子付き)
    'Moto_TBL リンク元のテーブル名
    'Saki_TBL リンク先のテーブル名
    
    Dim db As DAO.Database
    Dim tbldf As DAO.TableDef
    Set db = CurrentDb
    Set tbldf = db.CreateTableDef(Saki_TBL) 'リンク先
    tbldf.Connect = ";DATABASE=" & PTH & ";TABLE=" & Moto_TBL 'リンク元
    tbldf.SourceTableName = Moto_TBL  'リンク元"
    db.TableDefs.Append tbldf
    Set tbldf = Nothing: Set db = Nothing
    Application.RefreshDatabaseWindow
    Create_Link_Table = True
    'Get_Error_Data ("Create_Link_Table")
    Exit Function
Err_Task:
    Create_Link_Table = False
    'Get_Error_Data ("Create_Link_Table")
    Exit Function
End Function
Function Get_File_Path_Instr(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2018/03/01
    '変更日:2018/03/04
    'ファイルの格納フォルダを返す。
    
    Dim Kakuchoushi As String
    Dim File_Name As String
    Dim Len_Kakuchoushi As Integer
    Dim Len_File_Name As Integer
    Dim Len_PTH As Integer
    Dim RE_PTH As String
    
    On Error Resume Next
    If PTH = "" Then
        Get_File_Path_Instr = ""
        'Get_Error_Data ("Get_File_Path_Instr")
        Exit Function
    End If
    Len_PTH = Len(PTH)
    File_Name = Get_BaceName_Instr(PTH)
    Len_File_Name = Len(File_Name)
    Kakuchoushi = Get_kakuchoushi_Instr(PTH)
    Len_Kakuchoushi = Len(Kakuchoushi)
    
    RE_PTH = Left(PTH, (Len_PTH - (Len_File_Name + Len_Kakuchoushi + 2)))
    Get_File_Path_Instr = RE_PTH
    'Get_Error_Data ("Get_File_Path_Instr")
    Exit Function
End Function
Function Get_kakuchoushi_Instr(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2018/03/02
    '変更日:2018/03/02
    '※ファイルの拡張子を取得する。
    
    Dim PTH_Len As Integer 'フルパスの長さ
    Dim COMMA_Point As Integer 'コンマの位置
    Dim PTH_Point As Integer '拡張子の長さ
    Dim PTH_OUT As String '拡張子の格納先
    
    PTH_Len = Len(PTH) 'フルパスの長さ取得
    COMMA_Point = InStrRev(PTH, ".") 'カンマの位置を右から走査して取得
    PTH_Point = PTH_Len - (COMMA_Point) 'フルパスの長さからコンマ位置を差し引く
    PTH_OUT = Right(PTH, PTH_Point) '右からフルパスの長さからコンマ位置を差し引いた文字文取得
    Get_kakuchoushi_Instr = PTH_OUT '拡張子を返す
    'Get_Error_Data ("Get_kakuchoushi_Instr")
    Exit Function
End Function
Function Get_BaceName_Instr(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2018/03/03
    '変更日:2018/03/03
    '※ファイルのベース名を取得する。
    
    Dim PTH_Len As Integer 'フルパスの長さ
    Dim COMMA_Point As Integer 'コンマの位置
    Dim PTH_Point As Integer '拡張子の長さ
    Dim PTH_OUT As String '拡張子の格納先
    
    PTH_Len = Len(PTH) 'フルパスの長さ取得
    COMMA_Point = InStrRev(PTH, "\") '\の位置を右から走査して取得
    PTH_Point = PTH_Len - (COMMA_Point) 'フルパスの長さから\位置を差し引く
    PTH_OUT = Right(PTH, PTH_Point) '右からフルパスの長さから\位置を差し引いた文字文取得
    
    COMMA_Point = InStrRev(PTH_OUT, ".") '拡張子のカンマを取得
    
    PTH_OUT = Left(PTH_OUT, COMMA_Point - 1) '拡張子のカンマの前迄を取得
    Get_BaceName_Instr = PTH_OUT 'ファイルのベース名をを返す
    Exit Function
End Function
Function Get_SQL_ST(Q_Name As String) As String
    '作成者:瀧澤 禮好
    '作成日:2018/06/27
    '更新日:2018/06/27
    'クエリのSQLを取得
    
    Get_SQL_ST = CurrentDb.QueryDefs(Q_Name).SQL
    Exit Function
End Function
Function Get_Window_Title(Get_Win_Title As String) As Boolean
    '作成者:瀧澤禮好
    '作成日:2018/08/14
    '変更日:2018/08/14
    'ウインドウのタイトルを取得する。
    
    Dim OBJ_MS_Word As Object
    Set OBJ_MS_Word = CreateObject("Word.Application") 'ワードを起動
    If OBJ_MS_Word.Tasks.Exists(Get_Win_Title) Then 'ワードのタイトル取得機能で検索
        '起動している
        Get_Window_Title = True
    Else
        '起動していない
        Get_Window_Title = False
    End If
    OBJ_MS_Word.Quit
    Set OBJ_MS_Word = Nothing
    Exit Function
End Function
Function Get_Kakutei_Waku(SG_No_N As String) As String
    '作成者:瀧澤禮好
    '作成日:2018/10/06
    '変更日:2018/10/06
    'VBA内で文字列を「’」クォーテーションで囲む
    
    Dim SG_No_S As String '電番確定枠SG付き
    'Dim SG_No_N As String '電番確定枠数字
    
    SG_No_S = "'" & SG_No_N & "'"
    
    Get_Kakutei_Waku = SG_No_S
    Exit Function
End Function
Function Get_SQL_ST_PTH(PTH As String, Q_Name As String) As String
    '作成者:瀧澤 禮好
    '作成日:2019/01/11
    '更新日:2019/01/11
    'クエリのSQLを取得(外部Accessファイル)
    
    Dim Get_SQL_DB  As DAO.Database
    Dim SQL_STR As String
    On Error GoTo Error_Task
    
    Set Get_SQL_DB = OpenDatabase(PTH)
    
    SQL_STR = Get_SQL_DB.QueryDefs(Q_Name).SQL
    Get_SQL_DB.Close
    Set Get_SQL_DB = Nothing
    Get_SQL_ST_PTH = SQL_STR
    Exit Function
Error_Task:
    Get_SQL_ST_PTH = "取得出来ませんでした!"
    Exit Function
End Function
Function Time_Stamp_Get() As String
    '作成者:瀧澤 禮好
    '作成日:2019/01/11
    '更新日:2019/01/11
    
    'タイムスタンプの作成
    
    Dim TS As String
    TS = Format(Now(), "yyyymmddhhnnss") 'タイムスタンプ作成
    Time_Stamp_Get = TS
End Function

 

 
Module_DAO:

 
Option Compare Database
Option Explicit

 
Sub Make_Usys_Objects()
    '作成者:瀧澤禮好
    '作成日:2019/01/06
    '変更日:2019/01/11
    '
    'クエリを元にレコードセット処理を行う。
    
    DoEvents
    Dim DAO_WS As Workspace
    Dim DAO_DB As DAO.Database
    Dim DAO_RS_IN As DAO.Recordset
    Dim DAO_RS_OUT As DAO.Recordset
    Dim DAO_FIL As DAO.Field
    Dim SQL_STR As String
    Dim cn As Long
    
    Set DAO_WS = DBEngine.Workspaces(0)
    Set DAO_DB = CurrentDb()
    Set DAO_RS_IN = DAO_DB.OpenRecordset("qry_Get_Objects") 'テーブル名又はクエリ名を設定。
    Set DAO_RS_OUT = DAO_DB.OpenRecordset("Usys_Objects") 'テーブル名又はクエリ名を設定。
    
    DoCmd.SetWarnings False
    SQL_STR = "DELETE Usys_Objects.* FROM Usys_Objects;"
    DoCmd.RunSQL SQL_STR, -1
    
    SQL_STR = " SELECT USys_Get_Objects.Connect, USys_Get_Objects.Database, USys_Get_Objects.DateCreate, USys_Get_Objects.DateUpdate, USys_Get_Objects.Flags, USys_Get_Objects.ForeignName, USys_Get_Objects.Id, USys_Get_Objects.Lv," _
    & " USys_Get_Objects.LvExtra, USys_Get_Objects.LvModule, USys_Get_Objects.LvProp, USys_Get_Objects.Name, USys_Get_Objects.Owner, USys_Get_Objects.ParentId, USys_Get_Objects.RmtInfoLong, USys_Get_Objects.RmtInfoShort, USys_Get_Objects.Type, Usys_Objects_Type.種類, Usys_Objects_Type.ObjectType" _
    & " FROM USys_Get_Objects INNER JOIN Usys_Objects_Type ON USys_Get_Objects.Type = Usys_Objects_Type.Type;"
    CurrentDb.QueryDefs("qry_Get_Objects").SQL = SQL_STR
    
    SQL_STR = " SELECT Usys_Objects.PTH, Usys_Objects.ObjectType, Usys_Objects.Name, Get_SQL_ST_PTH([PTH],[Name]) AS SQLプロパティ" _
    & " FROM Usys_Objects" _
    & " WHERE Usys_Objects.ObjectType='acQuery';"
    CurrentDb.QueryDefs("Usys_Query_Item_Object").SQL = SQL_STR
    
    cn = 1
    
    Do Until DAO_RS_IN.EOF 'レコードセットの最後まで繰り返す。
        DAO_RS_OUT.AddNew
        DAO_RS_OUT![No] = cn
        DAO_RS_OUT![Connect] = DAO_RS_IN![Connect]
        DAO_RS_OUT![Database] = DAO_RS_IN![Database]
        DAO_RS_OUT![DateCreate] = DAO_RS_IN![DateCreate]
        DAO_RS_OUT![DateUpdate] = DAO_RS_IN![DateUpdate]
        DAO_RS_OUT![Flags] = DAO_RS_IN![Flags]
        DAO_RS_OUT![ForeignName] = DAO_RS_IN![ForeignName]
        DAO_RS_OUT![Id] = DAO_RS_IN![Id]
        DAO_RS_OUT![Lv] = DAO_RS_IN![Lv]
        DAO_RS_OUT![LvExtra] = DAO_RS_IN![LvExtra]
        DAO_RS_OUT![LvModule] = DAO_RS_IN![LvModule]
        DAO_RS_OUT![LvProp] = DAO_RS_IN![LvProp]
        DAO_RS_OUT![Name] = DAO_RS_IN![Name]
        DAO_RS_OUT![Owner] = DAO_RS_IN![Owner]
        DAO_RS_OUT![ParentId] = DAO_RS_IN![ParentId]
        DAO_RS_OUT![RmtInfoLong] = DAO_RS_IN![RmtInfoLong]
        DAO_RS_OUT![RmtInfoShort] = DAO_RS_IN![RmtInfoShort]
        DAO_RS_OUT![Type] = DAO_RS_IN![Type]
        DAO_RS_OUT![種類] = DAO_RS_IN![種類]
        DAO_RS_OUT![ObjectType] = DAO_RS_IN![ObjectType]
        DAO_RS_OUT![PTH] = [Forms]![frm_Main]![txt_PTH]
        DAO_RS_OUT.Update
        DAO_RS_IN.MoveNext '次のレコードへ移動
        cn = cn + 1
    Loop
    
    DAO_RS_IN.Close 'レコードセットを閉じる
    DAO_RS_OUT.Close     'レコードセットを閉じる
    DAO_DB.Close 'データベースを閉じる。
    DAO_WS.Close 'ワークスぺスを閉じる。
    

 
    Set DAO_RS_IN = Nothing 'オブジェクト変数の初期化。
    Set DAO_RS_OUT = Nothing 'オブジェクト変数の初期化。
    Set DAO_WS = Nothing  'オブジェクト変数の初期化。
    Set DAO_DB = Nothing   'オブジェクト変数の初期化
    Exit Sub
End Sub
Sub Make_Usys_Query()
    '作成者:瀧澤禮好
    '作成日:2019/01/08
    '変更日:2019/01/12
    '
    'クエリを元にレコードセット処理を行う。
    
    DoEvents
    Dim DAO_WS As Workspace
    Dim DAO_DB As DAO.Database
    Dim DAO_RS_IN As DAO.Recordset
    Dim DAO_RS_OUT As DAO.Recordset
    Dim DAO_FIL As DAO.Field
    Dim SQL_STR As String
    Dim cn As Long
    
    Set DAO_WS = DBEngine.Workspaces(0)
    Set DAO_DB = CurrentDb()
    Set DAO_RS_IN = DAO_DB.OpenRecordset("Usys_Query_Item_Object") 'テーブル名又はクエリ名を設定。
    Set DAO_RS_OUT = DAO_DB.OpenRecordset("Usys_Query") 'テーブル名又はクエリ名を設定。
    
    DoCmd.SetWarnings False
    SQL_STR = "DELETE Usys_Query.* FROM Usys_Query;"
    DoCmd.RunSQL SQL_STR, -1
    
    
    cn = 1
    
    Do Until DAO_RS_IN.EOF 'レコードセットの最後まで繰り返す。
        DAO_RS_OUT.AddNew
        DAO_RS_OUT![連番] = cn
        DAO_RS_OUT![クエリ名] = DAO_RS_IN![Name]
        DAO_RS_OUT![SQLプロパティ] = DAO_RS_IN![SQLプロパティ]
        DAO_RS_OUT.Update
        DAO_RS_IN.MoveNext '次のレコードへ移動
        cn = cn + 1
    Loop
    
    DAO_RS_IN.Close 'レコードセットを閉じる
    DAO_RS_OUT.Close     'レコードセットを閉じる
    DAO_DB.Close 'データベースを閉じる。
    DAO_WS.Close 'ワークスぺスを閉じる。
    

 
    Set DAO_RS_IN = Nothing 'オブジェクト変数の初期化。
    Set DAO_RS_OUT = Nothing 'オブジェクト変数の初期化。
    Set DAO_WS = Nothing  'オブジェクト変数の初期化。
    Set DAO_DB = Nothing   'オブジェクト変数の初期化
    
    Call Change_SQL_Pro
    Exit Sub
End Sub

 
Sub Change_SQL_Pro()
    '作成者:瀧澤禮好
    '作成日:2019/01/12
    '変更日:2019/01/12
    'SQLプロパティん書き換え
    
    Dim cnt As Long
    Dim Item_cnt As Long
    Dim Change_Item As String
    Dim PTH As String
    Dim SQL_STR As String
    
    PTH = [Forms]![frm_Main]![txt_PTH]
    Item_cnt = DCount("連番", "Usys_Query")
    
    For cnt = 1 To Item_cnt
        Change_Item = DLookup("クエリ名", "Usys_Query", "[連番]=" & cnt)
        [Forms]![frm_BGF]![txt_SQL_Pro] = Get_SQL_ST_PTH(PTH, Change_Item)
        SQL_STR = " UPDATE Usys_Query SET Usys_Query.SQLプロパティ = [Forms]![frm_BGF]![txt_SQL_Pro] WHERE Usys_Query.連番=" & cnt & ";"
        DoCmd.RunSQL SQL_STR, -1
        
    Next cnt
End Sub

 

 
WSH_FSO:

 
Option Compare Database

 
Function Get_File_Attributes(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2017/04/03
    '変更日:2017/04/03
    
    'ファイルの属性を設定します
    Dim FSO As Object
    Dim Att As Integer
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Att = FSO.GetFile(PTH).Attributes
    Set FSO = Nothing
    
    Select Case Att
    Case 0
        Get_File_Attributes = "標準ファイル。どの属性も設定されない。"
    Case 1
        Get_File_Attributes = "読み取り専用ファイル。"
    Case 2
        Get_File_Attributes = "隠しファイル。"
    Case 4
        Get_File_Attributes = "システムファイル。"
    Case 8
        Get_File_Attributes = "ディスクドライブボリュームラベル。この属性を設定することは出来ない(値の取得のみ可能)。"
    Case 16
        Get_File_Attributes = "フォルダ。この属性を設定することは出来ない。"
    Case 32
        Get_File_Attributes = "アーカイブ属性が設定されている(前回のバックアップ以降に変更されていればアーカイブ属性はオン)。"
    Case 64
        Get_File_Attributes = "リンクまたはショートカット、この属性を設定することは出来ない(値の取得のみ可能)。"
    Case 128
        Get_File_Attributes = "圧縮ファイル。この属性を設定することは出来ない(値の取得のみ可能)。"
    Case Else
        Get_File_Attributes = "属性不明。"
    End Select
    
    '値     意味
    '0      標準ファイル。どの属性も設定されない。
    '1      読み取り専用ファイル。
    '2      隠しファイル。
    '4      システムファイル。
    '8      ディスクドライブボリュームラベル。この属性を設定することは出来ない(値の取得のみ可能)。
    '16     フォルダ。この属性を設定することは出来ない。
    '32     アーカイブ属性が設定されている(前回のバックアップ以降に変更されていればアーカイブ属性はオン)。
    '64     リンクまたはショートカット、この属性を設定することは出来ない(値の取得のみ可能)。
    '128    圧縮ファイル。この属性を設定することは出来ない(値の取得のみ可能)。
    'Get_Error_Data ("Get_File_Attributes")
End Function
Function Get_File_DateCreated(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2017/04/02
    '変更日:2017/04/02
    
    'ファイルが作成された日付と時刻を返します
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Get_File_DateCreated = FSO.GetFile(PTH).DateCreated
    Set FSO = Nothing
    'Get_Error_Data ("Get_File_DateCreated")
End Function
Function Get_File_DateLastAccessed(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2017/04/02
    '変更日:2017/04/02
    
    'ファイルが最後にアクセスされたときの日付と時刻を返します
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:\Work\Book1.xlsが最後にアクセスされた日時を表示します
    Get_File_DateLastAccessed = FSO.GetFile(PTH).DateLastAccessed
    Set FSO = Nothing
    'Get_Error_Data ("Get_File_DateLastAccessed")
End Function
Function Get_File_DateLastModified(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2017/04/02
    '変更日:2017/04/02
    
    'ファイルが最後に更新されたときの日付と時刻を返します
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:\Work\Book1.xlsが最後に更新された日時を表示します
    Get_File_DateLastModified = FSO.GetFile(PTH).DateLastModified
    Set FSO = Nothing
    'Get_Error_Data ("Get_File_DateLastModified")
End Function
Function Get_File_Drive(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2017/04/02
    '変更日:2017/04/02
    
    'ファイルが存在するドライブの名前を返します
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''「C:」を表示します
    Get_File_Drive = FSO.GetFile(PTH).Drive
    Set FSO = Nothing
    'Get_Error_Data ("Get_File_Drive")
End Function
Function Get_File_Name_WSH(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2017/04/02
    '変更日:2017/04/02
    
    'ファイルの名前を返します
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    Get_File_Name_WSH = FSO.GetFile(PTH).Name
    Set FSO = Nothing
    'Get_Error_Data ("Get_File_Name_WSH")
End Function
Function Get_File_ParentFolder(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2017/04/02
    '変更日:2017/04/02
    
    'ファイルが存在するフォルダを返します
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''「C:\Work」を表示します
    Get_File_ParentFolder = FSO.GetFile(PTH).ParentFolder
    Set FSO = Nothing
    'Get_Error_Data ("Get_File_ParentFolder")
End Function
Function Get_File_Path(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2017/04/02
    '変更日:2017/04/02
    
    'ファイルのパスを返します
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''「C:\Work\Book1.xls」を表示します
    Get_File_Path = FSO.GetFile(PTH).Path
    Set FSO = Nothing
    'Get_Error_Data ("Get_File_Path")
End Function
Function Get_File_Size(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2017/04/02
    '変更日:2017/04/02
    
    'ファイルのサイズを返します
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''C:\Work\Book1.xlsのサイズを表示します
    Get_File_Size = FSO.GetFile(PTH).Size
    Set FSO = Nothing
    'Get_Error_Data ("Get_File_Size")
End Function
Function Get_File_Type(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2017/04/02
    '変更日:2017/04/02
    
    'ファイルの種類を返します
    Dim FSO As Object
    Set FSO = CreateObject("Scripting.FileSystemObject")
    ''「Microsoft Office Excelワークシート」を表示します
    Get_File_Type = FSO.GetFile(PTH).Type
    Set FSO = Nothing
    'Get_Error_Data ("Get_File_Type")
End Function
Function FSO_DR_Check(Folder_CK As String) As Boolean
    '作成者:瀧澤禮好
    '作成日:2017/09/16
    '変更日:2017/09/16
    'ドライブ有無のチェック
    
    Dim cFso As FileSystemObject 'オブジェクト変数宣言
    
    Set cFso = New FileSystemObject '変数にオブジェクトの代入
    
    If cFso.DriveExists(Folder_CK) Then
        FSO_DR_Check = True 'ドライブ有り
    Else
        FSO_DR_Check = False 'ドライブ無し
    End If
End Function
Function FSO_PH_Check(Folder_CK As String) As Boolean
    '作成者:瀧澤禮好
    '作成日:2016/02/26
    '変更日:2016/02/26
    'フォルダー有無のチェック
    
    Dim cFso As FileSystemObject 'オブジェクト変数宣言
    
    Set cFso = New FileSystemObject '変数にオブジェクトの代入
    
    If cFso.FolderExists(Folder_CK) Then
        FSO_PH_Check = True 'フォルダー有り
    Else
        FSO_PH_Check = False 'フォルダー無し
    End If
    'Get_Error_Data ("FSO_PH_Check")
End Function
Function FSO_FL_Check(File_CK As String) As Boolean
    '作成者:瀧澤禮好
    '作成日:2016/02/26
    '変更日:2016/02/26
    'ファイル有無のチェック
    
    Dim cFso As FileSystemObject 'オブジェクト変数宣言
    
    Set cFso = New FileSystemObject '変数にオブジェクトの代入
    
    If cFso.FileExists(File_CK) Then
        FSO_FL_Check = True 'ファイル有り
    Else
        FSO_FL_Check = False 'ファイル無し
    End If
    'Get_Error_Data ("FSO_FL_Check")
End Function
Function Get_Base_Name(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2016/02/26
    '変更日:2016/02/26
    '※ファイルのベースネームを取得する。
    'FSOを利用するので、「MicroSoft Scripting Runtime」の参照設定が必須!
    
    Dim objFileSys As Object
    Dim strPath As String
   
    Set objFileSys = CreateObject("Scripting.FileSystemObject")
   
    strPath = objFileSys.GetBaseName(PTH)
   
    Get_Base_Name = strPath
    Set objFileSys = Nothing
    'Get_Error_Data ("Get_Base_Name")
End Function
Function Get_kakuchoushi(PTH As String) As String
    '作成者:瀧澤禮好
    '作成日:2016/02/26
    '変更日:2016/02/26
    '※ファイルの拡張子を取得する。
    'FSOを利用するので、「MicroSoft Scripting Runtime」の参照設定が必須!
    
    Dim objFileSys As Object
    Dim strPath As String

 
    Set objFileSys = CreateObject("Scripting.FileSystemObject")

 
    strPath = objFileSys.GetExtensionName(PTH)

 
    Get_kakuchoushi = strPath
    Set objFileSys = Nothing
    'Get_Error_Data ("Get_kakuchoushi")
End Function

 

 
Module_ソースコードExport:

 
Option Compare Database
Option Explicit

 
Sub ExportComponents()
    'MS Access のVBAモジュールを全てエクスポート
    Dim Fso As New Scripting.FileSystemObject
    Dim OutDir As String

 
    'FSOでの出力先フォルダの有無確認、出力先フォルダの作成
    OutDir = Fso.GetParentFolderName(CurrentDb.Name) & "\Source_Code" 'カレントプロジェクトのフォルダに「src 」を作成。
    If Not Fso.FolderExists(OutDir) Then
        Fso.CreateFolder (OutDir)
    End If
    
    'VBAモジュールの取得
    Dim Component As VBComponent
    For Each Component In Application.VBE.ActiveVBProject.VBComponents
        Component.Export FileName:=OutDir & "\" & Component.Name & GetExtension(Component.Type)
    Next
End Sub

 

 
Function GetExtension(ComponentType As vbext_ComponentType) As String
    'Microsoft Visual Basic for Applications Extensibility*.*
    'Microsoft Scripting Runtime
    'コンポーネントタイプによる拡張子の設定
    
    Select Case ComponentType
        Case vbext_ComponentType.vbext_ct_ClassModule
            GetExtension = ".cls"
        Case vbext_ComponentType.vbext_ct_MSForm
            GetExtension = ".frm"
        Case vbext_ComponentType.vbext_ct_StdModule
            GetExtension = ".bas"
        Case vbext_ComponentType.vbext_ct_ActiveXDesigner
            GetExtension = ".cls"
        Case vbext_ComponentType.vbext_ct_Document
            GetExtension = ".cls"
    End Select
End Function

 
Usys_Objects:

 
Usys_Objects_Type:

 
Usys_Query:

 

 
Usys_Table:

 

 
qry_Get_Objects:
SELECT USys_Get_Objects.Connect, USys_Get_Objects.Database, USys_Get_Objects.DateCreate, USys_Get_Objects.DateUpdate, USys_Get_Objects.Flags, USys_Get_Objects.ForeignName, USys_Get_Objects.Id, USys_Get_Objects.Lv, USys_Get_Objects.LvExtra, USys_Get_Objects.LvModule, USys_Get_Objects.LvProp, USys_Get_Objects.Name, USys_Get_Objects.Owner, USys_Get_Objects.ParentId, USys_Get_Objects.RmtInfoLong, USys_Get_Objects.RmtInfoShort, USys_Get_Objects.Type, Usys_Objects_Type.種類, Usys_Objects_Type.ObjectType
FROM USys_Get_Objects INNER JOIN Usys_Objects_Type ON USys_Get_Objects.Type = Usys_Objects_Type.Type;

 
qry_Get_Query:
SELECT Usys_Objects.[No], Usys_Objects.Connect, Usys_Objects.Database, Usys_Objects.DateCreate, Usys_Objects.DateUpdate, Usys_Objects.Flags, Usys_Objects.ForeignName, Usys_Objects.Id, Usys_Objects.Lv, Usys_Objects.LvExtra, Usys_Objects.LvModule, Usys_Objects.LvProp, Usys_Objects.Name, Usys_Objects.Owner, Usys_Objects.ParentId, Usys_Objects.RmtInfoLong, Usys_Objects.RmtInfoShort, Usys_Objects.Type, Usys_Objects.種類, Usys_Objects.ObjectType
FROM Usys_Objects
WHERE (((Usys_Objects.Type)=5));

 
qry_Get_Table:
SELECT Usys_Objects.Name, Usys_Objects.Type, Usys_Objects.PTH, Usys_Objects.ObjectType, Usys_Objects.種類, Usys_Objects.Connect, Usys_Objects.Database, Usys_Objects.DateCreate, Usys_Objects.DateUpdate
FROM Usys_Objects
WHERE (((Usys_Objects.Name) Not Like 'MSys*') AND ((Usys_Objects.Type)=1)) OR (((Usys_Objects.Type)=6)) OR (((Usys_Objects.Type)=4));

 
Usys_Query_Item_Object:
SELECT Usys_Objects.PTH, Usys_Objects.ObjectType, Usys_Objects.Name, Get_SQL_ST_PTH([PTH],[Name]) AS SQLプロパティ
FROM Usys_Objects
WHERE Usys_Objects.ObjectType='acQuery';

 
オブジェクト一覧:
SELECT Usys_Objects.[No] AS 連番, Usys_Objects.Connect AS 接続種類, Usys_Objects.Database AS 接続場所, Usys_Objects.ForeignName AS 接続名, Usys_Objects.Name AS オブジェクト名, Usys_Objects.種類
FROM Usys_Objects
ORDER BY Usys_Objects.[No];

 
クエリ一覧:

 
SELECT Usys_Query.連番, Usys_Query.[クエリ名], Usys_Query.SQLプロパティ
FROM Usys_Query
ORDER BY Usys_Query.連番;

 
ID 種類 Type ObjectType
1 フォームForm -32768 acForm 2
2 マクロMacro (名前が ~(チルダ) で始まるものはForm等、各オブジェクトの 埋め込みマクロ?「~TMPCLPMacro」は「AutoExec」) -32766 acMacro 4
3 レポートReport -32764 acReport 3
4 モジュールModule -32761 acModule 5
5 User -32758    
6 UserDefined Dcument, SummaryInfo Document (Databases Container の Dcument) -32757    
7 ページ -32756    
8 テーブルTable (名前が MSys で始まるものはシステムオブジェクト) 1 acTable 0
9 MSysDb Document (Databases Container の Dcument) 2    
10 Collection 3    
11 Link Table (ODBC Link) 4    
12 クエリQuery (名前が ~(チルダ) で始まるものはForm, ListBox, ComboBox 各オブジェクトの RecordSourceまたはRowSource) 5 acQuery 1
13 Link Table (Access Link) 6 acTable  
14 Relationship 8    
15 Database プロパティ   acDatabaseProperties 11
16 データベース ダイアグラム (Access プロジェクト)   acDiagram 8
17 関数   acFunction 10
18 サーバー ビュー   acServerView 7
19 ストアド プロシージャ (Access プロジェクト)   acStoredProcedure 9
20 データ マクロ   acTableDataMacro 12