Excel VBAで「ActiveWorkbook.Path」 「ThisWorkbook.Path」コードが利用できなくなった時の対処方法
今まで、「ActiveWorkbook.Path」または「ThisWorkbook.Path」コードを使用して、開いているExcelファイルがあるフォルダーのパスを取得していましたが、突然「実行時エラー’76’: パスが見つかりません。」というエラーが表示されるようになり機能しなくなりました。調べてみると、OneDriveの設定で「ファイルのコラボレーション」の項目がなくなっていることに気づきました。
左が以前の画面、右が現在の画面ですが、以前まであった「ファイルのコラボレーション」欄がなくなっています。
これまでは、この設定を「オフ」にすることで問題なく利用できていましたが、設定できなくなってしまったようです。この問題については、以前にも対処方法を記載しましたが、自作した「UrlToLocal」関数を使用することで解決できますので試してみてください。
対処方法
以下のように「UrlToLocal」関数を使ってパスの変換を行います。
xPath = UrlToLocal(ActiveWorkbook.Path)
または、
xPath = UrlToLocal(ThisWorkbook.Path)
「UrlToLocal」関数のコードについては下記の通りです。
Public Function UrlToLocal(ByRef Url As String) As String
'OneDrive環境変数を格納する変数の定義
Dim OneDrive As String
'OneDrive環境変数の取得
OneDrive = Environ("OneDrive")
' URLからローカルパスを作成する
If Url Like "https://*" Then 'OneDriveのパスかどうかの判定
'「https://・・・・・・・/Documents」までの文字数を取得
'CharPosi = InStr(1, Url, "/Documents") + 10
'ローカルパス作成
'Url = OneDrive & Replace(Mid(Url, CharPosi), "/", Application.PathSeparator)
'4番目の「/」の位置を取得
Dim FourthSlashPosition As Long
FourthSlashPosition = FindFourthSlashPosition(Url)
'カレントディレクトリのパスを作成
Url = OneDrive & Replace(Mid(Url, FourthSlashPosition), "/", Application.PathSeparator)
Else
'OneDriveのパス以外だったらカレントドライブ指定
ChDrive Left(Url, 1)
End If
'作成したローカルパスを返す
UrlToLocal = Url
End Function
'-----------------------------------------------------------------------------
'4番目の「/」の位置を求める関数
Function FindFourthSlashPosition(ByVal text As String) As Long
Dim firstSlashPos As Long
Dim secondSlashPos As Long
Dim thirdSlashPos As Long
Dim fourthSlashPos As Long
firstSlashPos = InStr(1, text, "/")
If firstSlashPos > 0 Then
secondSlashPos = InStr(firstSlashPos + 1, text, "/")
If secondSlashPos > 0 Then
thirdSlashPos = InStr(secondSlashPos + 1, text, "/")
If thirdSlashPos > 0 Then
fourthSlashPos = InStr(thirdSlashPos + 1, text, "/")
If fourthSlashPos > 0 Then
FindFourthSlashPosition = fourthSlashPos
Else
' 4番目の「/」が見つからなかった場合の処理
FindFourthSlashPosition = -1
End If
Else
' 3番目の「/」が見つからなかった場合の処理
FindFourthSlashPosition = -1
End If
Else
' 2番目の「/」が見つからなかった場合の処理
FindFourthSlashPosition = -1
End If
Else
' 最初の「/」が見つからなかった場合の処理
FindFourthSlashPosition = -1
End If
End Function
「UrlToLocal」関数の詳細につきましては、以前掲載した下記リンク先の記事を参照ください。
https://scodebank.com/?p=696
ディスカッション
コメント一覧
まだ、コメントがありません