2014年12月4日木曜日

[MSAccess] マクロ定義を全てエクスポート

Microsoft Access のマクロをテキストファイルにエクスポートする機能はありません、マクロ オブジェクトの定義内容をテキストファイルに保存することになります。下にサンプルを挙げますが、参照設定として以下の追加が必要です。
  • Microsoft Scripting Runtime
参照設定は、Visual Basic Editor(VBE)のメニューから、ツール(T) > 参照設定(R) と辿ります。

MSAccess マクロ オブジェクトをテキストファイルに出力するサンプル
Sub ExportMacro()
    Dim Fso As New Scripting.FileSystemObject
    Dim OutDir As String

    OutDir = Fso.GetParentFolderName(CurrentDb.Name) & "\macro"
    If Not Fso.FolderExists(OutDir) Then
        Fso.CreateFolder (OutDir)
    End If

    Dim Containers As DAO.Containers
    Dim Container As DAO.Container
    Dim Document As DAO.Document

    Set Containers = CurrentDb.Containers
    Set Container = Containers("Scripts")
    For Each Document In Container.Documents
        SaveAsText ObjectType:=AcObjectType.acMacro, ObjectName:=Document.Name, FileName:=OutDir & "\" & Document.Name
    Next
End Sub

(※補足)CurrentDb.Containers("Scripts") といった具合に続けて実装したほうがシンプルだけど、「オブジェクトが正しくない」とエラーになります。

[Windows] 共有ドライブのサブフォルダに、ドライブを割り当てる

■ サブフォルダにドライブを割り当て

エクスプローラーからネットワーク ドライブを割り当てる場合は、共有ドライブおよび共有フォルダーに対する割り当てしかできません。しかしサブフォルダーにドライブを割り当てる方法はあります。

コマンドでドライブを割り当てれば、サブフォルダにドライブを割り当てられます。
(例:Z ドライブとして割り当てる場合)
> NET USE Z: \\ServerName\ShareName\FolderName /USER:DomainName\UserId MyPassword

■ 同じサーバについて複数の割り当て

さらに同じサーバにある複数のフォルダにドライブを割り当てるとエラーになります。これはWindowsのクライアント側の制約で、複数の割り当てのセッションを区別できないためである様子。

・エラーメッセージ
システム エラー 1219 が発生しました。
同じユーザーによる、サーバーまたは共有リソースへの複数のユーザー名での複数の接続は許可されません。サーバーまたは共有リソースへの以前の接続をすべて切断してから、再試行してください。


まず行う対策としては、使用中のセッションを閉じてやれば良い。

> NET USE Z: /DELETE

しかし、複数のフォルダに割り当てる方法はあります。例えばIPアドレスやサーバ名で使い分けると同じサーバと見なされません。

> NET USE X: \\ServerName\ShareName\FolderName1 /USER:DomainName\UserId
> NET USE Y: \\ServerName.DomainName\ShareName\FolderName2 /USER:DomainName\UserId
> NET USE Z: \\192.168.x.x\ShareName\FolderName3 /USER:DomainName\UserId


もっと割り当てる場合は、サーバ名を複数用意したり、サーバのIPアドレスを追加、hostsファイルに同じサーバへの名前を複数作成するなどで可能となる。

■ 参考資料

Windows XP でネットワーク ドライブの接続および切断を行う方法
http://support.microsoft.com/kb/308582/ja

第21回 ファイル共有プロトコルSMB/CIFS(その2) (3/3)
http://www.atmarkit.co.jp/ait/articles/0412/08/news096_3.html