でも、書き込み先が、ReadOnlyで開いていて書けないコトがある。
とゆー状況。
FileCopyステートメントを使ったら頻繁に実行時エラーが出てしまう。
on Error GoToでエラー処理するようcodingしてみた。
On Error GoTo ErrorHandlerSJ
FileCopy source, destination
Shell_Return = Shell(browser_exe, vbNormalFocus)
Exit Sub
ErrorHandlerSJ:
MsgBox ("ErrorSJ")
Exit Sub
…なんか、美しくないな…( ゚-゚)~゚やっぱりね、プロシージャの途中で終わるなんての、ダメだよね。
やっぱりね、返り値で成否を教えてくれないステートメントなんか使うのが
いけないよね。
そんなわけで、ちゃんと返り値で教えてくれる、おりこうさんな、
FileSystemObjectのCopyFileメソッドを使ってみた。
…実行時エラーでやがりましたorz
美しくないぜMicrosoft!
そんなわけで、
Dim FSO As FileSystemObject
Set FSO = New FileSystemObject
(中略)
On Error Resume Next
FSO.CopyFile source, destination
Select Case Err.Number
Case 0
Shell_Return = Shell(browser_exe, vbNormalFocus)
Case Else
MsgBox ("ErrorSJ:" & Err.Number)
End Select
こーなりました。
でも、入れ子になったりしたら、
On Error GoToですっ飛ばして終わりにしたほうがキレイなんだろうなぁ…
ちなみに、FileSystemObjectを使うには、参照設定に、Microsoft Scripting Runtimeが必要です。MSDNに書いてなくて探した探した(笑
もちろん、実行時バインディングすれば参照設定はいりません。
…ふと思ったんだけど、VBAの場合は実行時バインディングの方がいいんじゃなかろうか。
よほど多量じゃない限り、オーバーヘッドなんかたかが知れてるし、
違う環境(参照設定していないマシン)でも動くモノを~と考えると、
実行時バインディングの方が有利なんじゃないかと…
人様向けに作るときに改めて考えてみよう( ゚-゚)~゚
0 件のコメント:
コメントを投稿