[[20190321135512]] 『On Error GoTo 0』(T19) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『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


WB.Activateが抜けてました。
End If後にでも追記してください。
(ななし) 2019/03/21(木) 14:28

seiyaさん、ななしさん、ありがとうございます。

てっきり「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

seiyaさん、 ありがとうございます。

文字列操作のVBAにも馴染みがなく、Mid関数と何を組合せるかを検索しようと
してたところでした。

InStrRevをすっかり忘れていましたし、Mid$も知りませんでした。
「$」付きと無しの違いを調べて知ることができてよかったです。

これからもよろしくお願いします…
(T19) 2019/03/22(金) 10:50


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.