カレントデータベースの全ての標準モジュールをバックアップフォルダに
エクスポート します。
プロシージャでする理由は
- モジュールをひとつずつするのが面倒くさい。
- ファイル名に日付をつける事により確認しやすいし、二重のバックアップになる。
- モジュール名は モジュール削除 は参照。
- モジュールの実行順は エクスポート→削除→インポート となります。
手順は
- 参照設定 の確認。
- モジュールをエクスポートするフォルダを作ります。 例:D:\My Documents\ACCESS\Bas00
- データベース毎のサブフォルダを作ります。 例:hp.mdb → 「Homepage」
- エクスポートされるファイル名は「モジュール名.Bas」となります。
例:A0ModuleSave.Bas、A0ModuleSave_0107.Bas(日付を付加した場合)
- 三つのプロシージャは 同じモジュール に入れて下さい。
- 赤字 は環境に合わせて設定する部分です。
VBComponent オブジェクトの Type プロパティの設定値は、次のとおりです。
定数 値 内容
vbext_ct_StdModule 1 標準モジュール
vbext_ct_ClassModule 2 クラス モジュール
vbext_ct_MSForm 3 Microsoft Form
vbext_ct_ActiveXDesigner 11 ActiveX デザイナ
vbext_ct_Document 100 Document モジュール
Option Compare Database
Option Explicit
Dim mypActName As String 'ActiveDatabase Name
Dim mypBkUpFPath As String 'BackUp フルパス名
Dim mypBkFolder As String 'BackUp フォルダ名
Const mypBkPath As String = "D:\My Documents\ACCESS\Bas00\" 'BackUp パス名
Function FMoFolderCoice(mypActName As String)
''モジュールフォルダ 選択 2002/10/19
' mypf=FMoFolderCoice( mypActName)
Dim mypZname As String
Dim mypZFolder As String
Dim mypZMsg1 As String
mypZMsg1 = " ] フォルダが設定されていません。 "
If mypActName = "Master.mdb" Then
mypZFolder = "Master"
ElseIf mypActName = "個人.mdb" Then
mypZFolder = "個人"
ElseIf mypActName = "パソコン.mdb" Then
mypZFolder = "パソコン"
ElseIf mypActName = "hp.mdb" Then
mypZFolder = "Homepage"
Else
mypZMsg1 = "[ " & mypZname & mypZMsg1
MsgBox mypZMsg1, vbCritical
End
End If
FMoFolderCoice = mypZFolder
End Function
Function FMoExportCom00()
''Module Export Start 2002/10/19
' FMoExportCom00
''フルパスファイル名からファイル名を取り出す
mypActName = FPickUpName(1)
''モジュールフォルダ 選択 2002/9/4
mypBkFolder = FMoFolderCoice(mypActName)
mypBkUpFPath = mypBkPath & mypBkFolder & "\"
''モジュールエクスポート 共通1 2002/5/22
PMoExport01 mypActName
'MsgBox mypBkPath
End Function
Sub PMoExport01(mypDbName As String)
''モジュールエクスポート 共通1 2002/5/22
' PMoExport01 mypDbName
Dim myVBAComp As Object
Dim mypMoName As String 'モジュール名
Dim mypMoType As Integer 'モジュール型 1:標準 2:Class 3:Form
Dim mypMoCount As Integer 'モジュール数
Dim mypTitle As String
Dim mypMsg1 As String
Dim mypMsg2 As String
Dim mypMsg3 As String
Dim mypRetMsg As Integer
mypTitle = "Module Export"
mypMsg1 = "エキスポート終了。 "
mypMsg2 = "ファイル名に日付を付けますか。? "
mypMsg1 = mypMsg1 & vbNewLine & vbNewLine & mypDbName & " [ "
mypMsg2 = mypMsg2 & vbNewLine & vbNewLine & mypDbName & " [ "
''モジュールエクスポートの確認
For Each myVBAComp In VBE.ActiveVBProject.VBComponents
mypMoType = myVBAComp.Type
If mypMoType = 1 Then
mypMoCount = mypMoCount + 1
End If
Next
Beep
mypMsg3 = mypMsg2 & mypMoCount & " ] → [ "
mypMsg2 = mypMsg3 & mypBkUpFPath & " ] "
mypRetMsg = MsgBox(mypMsg2, vbYesNoCancel + vbQuestion + vbDefaultButton2, mypTitle)
If mypRetMsg = vbCancel Then
End
End If
'''モジュールエクスポート
mypMoCount = 0
For Each myVBAComp In VBE.ActiveVBProject.VBComponents
mypMoType = myVBAComp.Type
If mypMoType = 1 Then
mypMoCount = mypMoCount + 1
mypMoName = myVBAComp.name
''モジュールエクスポート 共通2
PMoExport02 mypRetMsg, mypMoName
End If
Next
mypMsg1 = mypMsg1 & mypMoCount & " ]"
MsgBox mypMsg1, vbInformation
End Sub
Sub PMoExport02(mypRetMsg As Integer, mypMoName As String)
''モジュールエクスポート 共通2 2002/5/22
' PMoExport02 RetMsg,MoName
Dim mypOutName As String
Dim myExtName As String
Dim mypMonth As String
Dim mypDay As String
If mypRetMsg = vbYes Then
mypMonth = Format(Date, "mm")
mypDay = Format(Date, "dd")
myExtName = "_" & mypMonth & mypDay & ".Bas"
ElseIf mypRetMsg = vbNo Then
myExtName = ".Bas"
End If
mypOutName = mypBkUpFPath & mypMoName & myExtName
VBE.ActiveVBProject.VBComponents(mypMoName).Export (mypOutName)
End Sub
Function FPickUpName(myjob As Integer)
''フルパスファイル名からフォルダ名・ファイル名を取り出す 2002/10/19
' FPickUpName myJob '1:ファイル名 2:フォルダ名
Dim myCDB As Database 'カレントデータベース
Dim myCDbName As String 'フルパスファイル名
Dim myFLen As Integer
Dim myPoint1 As Integer
''カレントデータベース名
Set myCDB = CurrentDb
myCDbName = myCDB.name
''フルパスファイル名の文字数
myFLen = Len(myCDbName)
''myCDbNameの最後から "\" があるかを調べる
myPoint1 = InStrRev(myCDbName, "\", , vbBinaryCompare)
If myPoint1 = 0 Then
MsgBox "Error"
Exit Function
End If
If myjob = 1 Then
FPickUpName = Mid(myCDbName, myPoint1 + 1, myFLen - myPoint1)
ElseIf myjob = 2 Then
FPickUpName = Mid(myCDbName, 1, myPoint1)
End If
' MsgBox myCDbName & vbNewLine & vbNewLine & FPickUpName
End Function