[[20230603084539]] 『長いパスを取得するには。VBA』(りんご) ページの最後に飛ぶ

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

 

『長いパスを取得するには。VBA』(りんご)

SharePointに格納されているExcelファイルをマクロで操作したいのですが、恐らくパス名が255文字以上だからか、エラーとなり開いたり指示を出したりすることが出来ません。
色々ネットで探すも解決に至らず、何か方法(パスを短くする等)があればご教授頂きたく、お願いいたします。

SharePoint内のファイルをデスクトップアプリで開き、ファイルの情報からパスのコピーでURLを取得し、そのパスをマクロに書き込みファイルをopenしようとすると、エラーとなり開けません。(255文字以下なら開ける事確認済)

次に、下記コードであればファイルを開く事が出来るのは確認済。
CreateObject("WScript.Shell").Run "chrome.exe-url "& "https:// パス省略 "

このパスを変数にして扱えないかトライしているのですがうまくいきません↓

    Dim sURL As String
    sURL = "〜パス〜"     
    CreateObject("WScript.Shell").Run "chrome.exe -url " & sURL

  このsURLの変数を使って…
  Dim wb As Workbook

    Set wb = sURL
    sURL.Sheets("Sheet1").Range("A1").Copy    ←エラーにはならないが、コピーされない。

  もしくは、もうファイルは開いているので(デスクトップアプリではないが…)
  Workbooks("実験.xlsx").Sheets("Sheet1").Range("A1").Copy

    とやっても同様にA1セルをコピーしてくれません。

何か方法ありましたら、教えてください。
  

< 使用 Excel:Microsoft365、使用 OS:Windows10 >


勘違いしてたらごめんなさいですが↓でもダメなんでしょうか?
 set wb = Workbooks.Open(sURL)

(もこな2) 2023/06/03(土) 09:35:40


もこな2様
ありがとうございます。
家のPCだと確認が出来ませんので試せていませんが、
もう一度デスクトップアプリでExcelを開き直して、その後、
wb.Sheets("〜 のように普段どおり組んでいくイメージでしょうか。
文字制限が大丈夫だと良いですがやってみます。貴重なアドバイス、ありがとうございます。
(りんご) 2023/06/03(土) 09:52:40

別案です。試していませんが
ユーザー環境変数で新規に作成した
物をEnvironで変換して使用するとかはだめでせうか
2000文字とか、組み合わせでも?8000文字とかの制限は
こちらも有るようですが。。。
制限内容詳細に付きましては確認致しておりません
ガク。。。とほほ〜。。。トボトボ。。。(◎_◎;)
お詳しい先生よろしく〜〜〜
やり方は、もこな2さん、と同じです。。。^^;[パクリです]
m(__)m

(隠居Z) 2023/06/03(土) 15:16:57


隠居Z様
ありがとうございます。
環境変数、初めて聞くワードなので調べてみましたが、使い方がいまいち分かりません。

まずは、システムの詳細設定から、長いファイルのフルパスを入力して、環境変数に登録するという事でしょうか。
試しに"aaa"と登録して、msgBox Environ("aaa")としたら、空白が返ってきました。

Environで変換というのもよく分からなかったのですが、やり方はもこな2さんと一緒ということは、
set wb = Workbooks.Open Environ("aaa")とかでしょうか?

素人な質問ですみません。
(りんご) 2023/06/03(土) 16:57:37


ご返信遅れて、相済みません。
ダメでしたか、いや、私も試したことが無かったもので、
勉強になりました、ちょっと、興味も有りますので
お詫びと、お勉強のために
第二弾、複数の環境変数のつなぎ合わせ、実験してみます
結果をご報告いたしますので、ダメもとで、。。。お許しを
実際に256文字超える環境が無いもので、←作れよ。。。^^;
はい
暫時、御猶予を
m(__)m
(隠居Z) 2023/06/03(土) 17:50:32

いや〜済みません済みません。。。m(__)m
環境変数自体は設定可能みたいですが、Windows様が、ご機嫌斜めです^^;
↑はお役に立たないと思いますので、無視して戴きます様、お願いいたします。
レジストリーの
LongPathsEnabledの値を1にすればいいようですが。。。
何分、場所が場所なので、バックアップをお取りの上、関連サイト、
若しくは、書籍等々をご確認の上、自己責任でお願いいたします。
これ以上は、実験する勇気が御座いません、何かの参考にでもなれば
幸甚です。お役に立てず、済みませんでした。m(__)m
でわ^^;失礼致します。

(隠居Z) 2023/06/03(土) 19:13:41


隠居Z様
お忙しいところ、色々ありがとうございます。
中々奥が深そうですね。
レジストリーを使ってパス 260 文字制限の解除が出来るのですね。
関連サイトをあさってみます!
ありがとうございます。
(りんご) 2023/06/03(土) 19:35:19

m(__)m
Windows様は何とかお許し下さるようですが。そのぉ
エクセル様とVBAのお局様がお許しいただけないような気がいたします。
困った事ですね。..
ながぁ〜いパスを短いパスに変換するAPI関数が有ったような記憶が
御座います。宜しければ合わせて、ご勘案を。。。←ダメもとで^^;
がんばっておられるよ〜なので。。。思い出したものを。
頼りない事で。^^;重ね重ね恐縮ですm(__)m
何か発見しましたら、また、現れるかもです。。。
ダメなら。。。このまま、すたこらさっさっさぁ〜( ̄▽ ̄)
という事になります。他の回答者様のアドバイスもお待ちくださいね
でわ
(隠居Z) 2023/06/04(日) 09:20:25

>ながぁ〜いパスを短いパスに変換するAPI関数が有ったような記憶が

長いパス名から短いパス名を取得する
GetShortPathName関数

(nanash) 2023/06/04(日) 10:42:29


こんばんわ。。。^^;
また、間違っているかもですが、別案で
レジストリで256文字限界突破すると、コピーコマンドが使えるようになりました。
1.VBAコードから、浅い階層に[256文字以内のとあるフォルダ^^;]コピーバッチを作成後起動
2.浅い階層にコピーしたブックを普通に開く
3.必要な処理後、保存
4.なが〜い奥深くの階層に書き戻すバッチを作成
5.書き戻す。。。おしまい
BATはごく普通にshellから起動するとかで何とか成りません
でしょうかね。。。( ̄▽ ̄)。独り言です。。。

m(__)m

(隠居Z) 2023/06/04(日) 16:44:34


隠居Z様、nanbsh様
ありがとうございます!
GetShortPathNameというAPIですね。
それを使って255文字以上でも対応可能なコード探してみます。
ネットで色々調べていくと、似たような問題で悩んでいる方が多そうですね。
255文字の規制を取っ払ってくれれば良いのですが…。。
色々アドバイス頂き、勉強になります。ありがとうございます。

隠居Z様
お礼を書いている間に、更なるアドバイスありがとうございます。
浅い階層で作業して戻す…ですね。
全く思い付かなかったアプローチ方法です。
書いていただいた手順を再現出来るように、調べてみます。
重ね重ね、ありがとうございます!
(りんご) 2023/06/04(日) 16:53:07


コメント返信:

[ 一覧(最新更新順) ]


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