概要
Excelファイルを複数人で編集したいことは多々あります。
その中で、FTPを使った方法はとても簡単で、応用も聞くので備忘録として残しておこうと思います。
特に、DOS窓を使った操作は、VBAと違い、バージョン等に依存せずWindowsなら安定した動作が見込めるので、管理しやすいです。
大まかな流れ
- DOSのFTPコマンドでリモートからファイルをダウンロード
- リモートのファイル名をリネーム ( sample.xlsm → editing )
- 編集
- リモートのファイル名をリネーム ( editing → sample.xlsm )
- DOSのFTPコマンドでリモートにファイルをアップロード
ファイル
ダウンロード用
download.bat
@echo off
rem ***************************
rem download.ftpを開く
rem ***************************
ftp -s:C:\**\ftp\download.ftp
rem ***************************
rem ダウンロードしたsample.xlsmを開く
rem ***************************
cd C:\**\excel\sample.xlsm
exit
download.ftp
open **example.com**
**username**
**password**
rem ***************************
rem sample.xlsmをダウンロードする場所
rem ***************************
lcd C:\**\excel
rem ***************************
rem sample.xlsmがある場所
rem ***************************
cd www
rem ***************************
rem バイナリを指定しないと、excelファイルが破損します。
rem ***************************
bin
get sample.xlsm
rem ***************************
rem リモートのsample.xlsmをeditingにリネーム
rem ***************************
rename sample.xlsm editing
quit
アップロード用
sample.xlsm
'Excelファイルを閉じたときに自動実行される
Sub Auto_Close()
Call FTPアップロード
End Sub
Sub FTPアップロード()
Application.StatusBar = "処理中: FTPアップロード"
`DOS窓でコマンドを実行する
Dim WSH, wExec, sCmd As String
Set WSH = CreateObject("WScript.Shell")
'upload.ftpのパス
sCmd = "ftp -s:C:\**\ftp\upload.ftp"
Set wExec = WSH.Exec("%ComSpec% /c " & sCmd)
Do While wExec.Status = 0
DoEvents
Loop
Set wExec = Nothing
Set WSH = Nothing
Application.StatusBar = False
End Sub
upload.ftp
open **example.com**
**username**
**password**
rem ***************************
rem sample.xlsmをダウンロードした場所
rem ***************************
lcd C:\**\excel
rem ***************************
rem sample.xlsmをアップロードする場所
rem ***************************
cd www
rem ***************************
rem リモートのeditingをsample.xlsmにリネーム
rem ***************************
rename editing sample.xlsm
bin
put sample.xlsm
quit
補足
DOSコマンド自体はbatファイルとVBAだけで使えますが、DOSのFTPコマンドは別途FTPファイルを必要とするので、download.ftpとupload.ftpを用意しています。
リモートのファイル名を変えることで、編集中に他の人がファイルをダウンロードするのを防いでいますが、ローカルに前回ダウンロードしたファイルが残っている場合は、前回のファイルを開いてしまう可能性があるので注意が必要です。
ローカルのファイルを削除してもいいのですが、リスクが伴うので実装はしていません。
訂正、アドバイス等、コメントいただけるとうれしいです。