質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
86.12%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SharePoint

SharePointは、マイクロソフトにより開発された、ソフトウェア開発のドキュメント管理やコラボレーションを行うプラットフォームの総称です

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

受付中

マクロでSharepoint上のパスを取得する方法について

Shinchan0124
Shinchan0124

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SharePoint

SharePointは、マイクロソフトにより開発された、ソフトウェア開発のドキュメント管理やコラボレーションを行うプラットフォームの総称です

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0回答

0リアクション

0クリップ

1356閲覧

投稿2022/06/01 13:18

編集2022/06/03 17:58

お世話になります。以下、調べてみてもわからなかったため、質問させて頂きます。

Ver.1 : FileSystemObjectを使ってDir関数を使わずに書いてみたところ、エラーはなくなりました。
一方、既存ファイルがあるか確認するIf fso.FileExists()では、ファイルが存在していても
ファイルを認識せず、毎回新規のファイルを作成し上書きするようになってしまいました。
正直お手上げです。。。

【背景】
毎月、PPTで月次のレポートを自動作成するマクロを動かしています。
すでにPPTが作成されていたら停止、未作成ならテンプレートを開いて、そのまま表の貼付け等に進むというものです。今回は問題が生じている部分だけを抜粋して記載しております。
先月、社内のサーバーがSharepointに移行されたことに伴い、マクロの保存先、ファイルの作成先・
既存ファイルの有無の確認先などすべてSharepointのフォルダ内で行うことになりました。
マクロとファイルの保存先は同じSharepoint内ですが、フォルダの階層は異なります。

【不具合が起きているコード】

Dim ppApp As New PowerPoint.Application Dim ppPt As Presentation Dim folder_pass, file_name Dim fso As New FileSystemObject folder_pass = "\\会社名.sharepoint.com\DavWWWRoot\sites\ABC\月次レポート\" file_name = "会社名 " & Report_month(ThisWorkbook.Sheets("Master").Range("C2")) & " Report " & Year(ThisWorkbook.Sheets("Master").Range("C2")) & ".pptx" Set fso = New FileSystemObject If fso.FileExists(file_name) = True Then MsgBox ("The file already exist. Program suspended.") End Else Set ppPt = ppApp.Presentations.Open(folder_pass & "会社名 Monthly Report_Blank.pptx") End If

If Dir(folder_pass) <> "" Then のところで実行時エラー 52:ファイル名または番号が不正です。
というエラーが出ます。調べたところによると、Windows10のバージョンによってはWeb上のパスに対してDir関数が使えないケースがあるという記述も見つけました。その方はOne Driveを使った修正方法をご提案されていました。

【解決したいこと】
Sharepointに置いたままで、これまでと同じように使うにはどこをどのように修正すれば良いか
ご教授頂けないでしょうか?宜しくお願い致します。

以下のような質問にはリアクションをつけましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

下記のような質問は推奨されていません。

  • 間違っている
  • 質問になっていない投稿
  • スパムや攻撃的な表現を用いた投稿

適切な質問に修正を依頼しましょう。

Shinchan0124

2022/06/01 13:31

質問用のコードが少し間違えておりましたので、修正致しました。引き続きよろしくお願い致します。
mdj

2022/06/02 05:47

FileSystemObject で対応できるかなと思います。同環境がないので最終的にはなんともいえませんが。
Shinchan0124

2022/06/02 13:21

mdi様>ご回答ありがとうございます。FileSystemObjectも使って試してみていますが、SharePointのファイルパスを何とかしないとうまくいかなそうです。。。私のやり方が悪いのかもしれません。
mdj

2022/06/03 00:46

パスの値が正しくないかもしれないので、こちらを参考にパスを取得してOpenするだけのマクロを別途作成して試し、Openできればパス取得までは出来ていることになると思います。 https://mitomoha.hatenablog.com/entry/2021/01/30/025446 あとはそのパスをFileSystemObjectで処理できるんじゃないかなーと思います。 また同様の質問がMSコニュニティーでされていましたので、こちらを追うのもよいかもしれません。 https://answers.microsoft.com/ja-jp/msoffice/forum/all/vba%E3%81%A7%E3%81%AEsharepoint%E4%B8%8A%E3%81%AE/c6cead58-f23b-42da-a292-fd6b7bf529ac
Shinchan0124

2022/06/03 17:53

mdj様>ご回答ありがとうございます。前回お名前を間違えてしまい申し訳ございませんでした。ご紹介頂いた内容のページを拝見しパス取得までは問題なく行けました。ただ、なぜかFileSystemObjectのIf文にTrueが返ってこないですね。(ファイルを認識してくれません)
mdj

2022/06/06 00:46

こちらの手順ではどうでしょう? https://www.mutable.work/entry/upload-to-sharepoint-by-vba もしくは自前で関数を作成して、Openが出来たらTrue,できなかったFalseを返す処理を作れば実質同じにはなると思います(最適解かどうかはおいておくとして)。
Shinchan0124

2022/06/06 19:29

mdj様>再度ご回答ありがとうございます。プログラムをコピーして使ってみました。”local_full_path”だけを会社のSharepointのURL(https://~)にしてみたのですが、上手くいきませんでした。試しに会社のOneDrive(X:~)で試したら上手くいくんですけどね。。。それでも同僚が見れないのでNGですが。。。 ちなみにURLをデコードするなどの対応はすでにやってみました。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
86.12%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

SharePoint

SharePointは、マイクロソフトにより開発された、ソフトウェア開発のドキュメント管理やコラボレーションを行うプラットフォームの総称です

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。