[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『On Error GoTo 0』(T19)
よろしくお願いします。
質問)以下のマクロで既に「W」が開かれている場合、
「Workbooks(tg).Activate」の箇所でインデックスエラーが出ます。
上の行の「On Error GoTo 0」をコメントアウトすると正常に終了します。
「W」が開かれてない場合は、「W」を開けます。
エラーになる理由を教えていただけないでしょうか?
If文で開いているかどうかの判定後は、エラー処理をキャンセルしたいのですが…
Sub test_1903() On Error Resume Next
Dim tg As String tg = "c:\teru\W.csv" Open tg For Append As #1 Close #1
If Err.Number > 0 Then '// 既に開かれている場合アクティブにする
On Error GoTo 0 '判定後はキャンセルする
MsgBox "Opened" Workbooks(tg).Activate '// (何かの処理..) Else '// 開かれていない場合 On Error GoTo 0 MsgBox "Open" Workbooks.Open (tg) '// (何かの処理..) End If End Sub
< 使用 アプリ:Excel2010、使用 OS:Windows10 >
>tg = "c:\teru\W.csv" >Workbooks(tg).Activate
tgはフルパスなので、ファイル名だけ取り出す必要あり。 (seiya ) 2019/03/21(木) 14:23
Workbooks("c:\teru\W.csv").Activate ということになりますが、Workbooksにはファイル名しか指定できないので Workbooks("W.csv").Activate となるように加工する必要があります。
また、開かれているかの確認なら
Dim WB as Workbook On Error Resume Next Set WB = Workbooks("W.csv") On Error Goto 0
if WB is Nothing Then
Set WB = Workbooks.Open("c:\teru\W.csv") End If '// (何かの処理..)
という流れのほうが無難かと思います。
※未デバッグ
(ななし) 2019/03/21(木) 14:26
てっきり「On Error Goto 0」の使い方が悪いと思い込んでいました。
それ以前の「基本のキ」がなってなかったのですね..失礼しました。
(ファイル操作のマクロに不慣れで知識不足でした)
対象ファイルが多いので、汎用性のある「tg」の加工方法を考えます。
冒頭の開かれているかの確認コードは、転記モードで開いた方が高速化できると
ネット検索であったので採用しました。
具体的に検証はしていませんし、素人では想像できない何か不都合な
点があるようでしたら教えていただけると嬉しいです。
これからもよろしくお願いします。
(T19) 2019/03/21(木) 18:17
1) もし変数tgが動的に変化するなら
Dim tg As String, fn As String tg = "c:\teru\W.csv" fn = Mid$(tg, InStrRev(tg, "\") + 1)
でfnにファイル名が格納されます。
2) 現在の手法の利点は、ネットワーク上で同ファイルが開かれている場合も認識します。 (seiya ) 2019/03/21(木) 18:32
文字列操作のVBAにも馴染みがなく、Mid関数と何を組合せるかを検索しようと
してたところでした。
InStrRevをすっかり忘れていましたし、Mid$も知りませんでした。
「$」付きと無しの違いを調べて知ることができてよかったです。
これからもよろしくお願いします…
(T19) 2019/03/22(金) 10:50
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.