エクセルVBA(シート選択のエラー処理)–(2)

エラー処理2・・・・自分自身を開こうとする。

  このエラー処理は、自分自身を開くとまずいので、ThisWorkbook.FullName と 開こうとするファイ
  ルのフルパスの fPath を比較することで、同じなら、「自分自身を開こうとしてます。」のメッセージ
  を出して、Function  を抜け出します。

  If ThisWorkbook.FullName <> fPath Then
    
    ・*開こうとするファイルとすでに開いているファイルを比較する。
    
  Else
    MsgBox “自分自身を開こうとしてます。”
    Exit Function
  End If

  次の処理のファイルを比較するに先立ち、開こうとするファイルのファイル名を取り出しておきます。い
  くつか方法をためしましたが、文字列を編集する方法がいいみたいで、フルパスを文字の後尾から ”¥” 
  を探してファイル名を取り出します。緑の”¥”を探しだせば、赤のフィル名を取り出せます。

    E:¥VBA開発¥シート選択Dummy.xlsx
                  ←←←←←

  はじめ、InStrRev を使ってみましたが、思った結果がでなかったので(後でわかりました)文字列を反転
  して、先頭から”¥”の探し出し、その文字のある手前まで切り出して、ファイル名を取得しました。なん
  と、InStrRev 関数は、後ろから文字を探すのですが、見つけた場所の位置を、後ろから数えた位置では
  なく、前から数えた位置を返すみたいでした。下記のようにして  t_file_name にファイル名を取り込
  みました。
  ‘====読み込みのファイル名取り出し====
   Dim STR As String
   Dim t_file_name As String

   STR = StrReverse(fPath)
   t_file_name = Right(fPath, InStr(STR, “\”) – 1)

エラー処理3・・・・既に開いているファイルを開こうとする。
  既に開いている Book数を Workbooks.Count で取得して、For ループの中で、開こうとしている
  ファイル名と比較し、同名のファイルがあれば、True を そうでなければ False をセットして判定し
  ます。開いているファイル名は、Workbooks(i).Name で取得できます。
  False の場合だけ(同じファイルがない),目的のファイルを開き、Call sheets_set(Wb) で、取得する
  シート名をユーザーフォームのリストボックスに、セットします。

  For i = 1 To Workbooks.Count
    If Workbooks(i).Name = t_file_name Then
      BookFlag = True
    End If
  Next i

  If BookFlag <> True Then
    MsgBox “ファイルを開きます。”
    Set Wb = Workbooks.Open(fPath, UpdateLinks:=Ture, ReadOnly:=Ture)

    Call sheets_set(Wb)
    UserForm1.Show vbModeless
  Else
    MsgBox “すでに開いているファイルを開こうとしてます。”
    Exit Function
  End If

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA