業務の一環として毎日、決まった時間に処理が走るような仕組みをAccessで作っています。
今回やりたい事としてはタイトル通り、AAAというAccessでVBAを起動させると
別フォルダに格納されているBBBというAccess自体をコピーし、
同フォルダ内にあるCCCというAccess自体にペーストして上書きするという処理を構築したいと
思っています。
正確に言えば、既にその処理自体はあるのですが、そのAccessはAccess 2010(32bit)と古い為
Access2016(64bit)として作り直しています。
※以前まではofficeソフトが32bitだったのが現在、64bitのOfficeソフトにリプレースされています。
上記を踏まえた上で下記コードを実行すると、Accessが停止してしまい、閉じてしまいます。
以下は標準モジュールとして作成
VBA
1Option Compare Database 2 3Public Type SHFILEOPSTRUCT 4 hwnd As Long 5 wFunc As Long 6 pFrom As String 7 pTo As String 8 fFlags As Integer 9 fAnyOperationsAborted As Long 10 hNameMappings As Long 11 lpszProgressTitle As String 12End Type 13 14Public Declare PtrSafe Function SHFileOperation Lib "SHELL32.DLL" Alias _ 15 "SHFileOperationA" (lpFileOp As SHFILEOPSTRUCT) As Long 16 17Public Const FO_COPY = &H2 18Public Const FO_MOVE = &H1 19Public Const FOF_NOCONFIRMATION = &H10 20Public Const FOF_RENAMEONCOLLISION = &H8
以下はMicrosoft Access クラス オブジェクトとして作成
VBA
1Option Compare Database 2 3Private Sub Form_Open(Cancel As Integer) 4 5DoCmd.SetWarnings False 6 7'BBBというAccess自体をCCCというAccessにコピペ 8Dim stShellOp As SHFILEOPSTRUCT 9 With stShellOp 10 .hwnd = Application.hWndAccessApp 'Accessのハンドルをセット 11 .wFunc = FO_COPY 'コピーモードを指定'移動時は FO_MOVE 12 .pFrom = "C:\夜間バッチ処理\BBB.accdb" 'コピー元ファイルのフルパスをセット 13 .pTo = "C:\夜間バッチ処理\CCC.accdb" 'コピー先ファイルのフルパスをセット 14 .fFlags = FOF_NOCONFIRMATION '強制的に上書きコピーします 15 End With 16 If SHFileOperation(stShellOp) = 0 Then 17End If 18 19End Sub
結果
上記VBAを実行すると下記画像が表示され、Accessが閉じてしまいます。
移行前の環境(Access2010 32bit)で実行すると問題はないのですが・・・・。
こちらは前担当者が構築したもので、今はその担当者がいない為
どうしたら良いか分からない状態です。
出来る限り同じ仕組みのまま新しい環境に移行したいと思っていますので
解決方法をご教示頂けますと幸いです。
何卒、よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2017/08/15 01:45