Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7 Professional : Excel 2010)
社内共有データをonedrive上へ保存する
投稿日時: 20/04/10 18:35:33
投稿者: ふしぎちゃん

お世話になります。
 
社内ネットワークの共有フォルダの中に保存されているエクセルがあり
外部の人とonedriveで共有しているフォルダがあり、
 
社内ネットワークで共有しているエクセルを
そのonedriveに保存しようと思いますが、
各PCのonedriveのパスが違うので、どのようにすれば
各PCのonedriveのパスを取得して、その中にあるフォルダに
保存できるかがわかりません。
 
私のパソコンは、Dドライブにonedriveフォルダがあるので
D:\OneDrive\外部共有\予定表データ¥●●.xlsm
なのですが
”D:”がPCによって違うので、各PCのonedriveのパスを取得したいです。
 
どのようにすれば良いかを教えてください。
 
最初から、onedrive上で作業すればというご指摘もあると思いますが
共有がダブりコピーが沢山発生することがあるので、この対応を検討しています。
 
わかりにくい説明になっていますので
不明点はご指摘お願いします。

回答
投稿日時: 20/04/10 21:24:05
投稿者: simple

onedriveは、
C:\Users\usernameの直下にあるのが一般的のようですね。
ただし、質問者さんのように別のところに置いている人もいますから、
なかなか難しいですね。
 
特殊なフォルダの場所は、
WScript.Shell オブジェクトから取得する方法がありますね。
desktopなどです。
しかし、残念ながら、onedriveはその対象になっていません。
下記参照。
https://www.tipsfound.com/vba/18026
 
ということで、理屈から言えば、すべてのドライブ、すべてのフォルダを検索する
必要があるのかもしれません。
 
それも結構時間がかかりますから、
設定場所についてなんらかのルールを定めるといったことが実質的かもしれません。
セキュリティ対策との関係もありますから、
こうした所というよりも、
会社のITセクションに相談されるのがよいと思います。

回答
投稿日時: 20/04/10 23:52:04
投稿者: 月

手元で確認できる環境がないのですが、OneDriveの環境変数がないでしょうか。
コマンドプロンプトでsetコマンドを実行して、以下のような環境変数がないか確認してみてください。
環境変数があればVBAから利用できそうです。
 
OneDriveConsumer
OneDriveCommercial
OneDrive
 
Windows 10ミニTips 第360回 OneDriveの環境変数を活用する
https://news.livedoor.com/article/detail/16167514/
Windows10の環境変数の一覧と調べ方
https://onoredekaiketsu.com/windows10-environment-variables/
環境変数の値を取得する(Environ関数)
https://www.moug.net/tech/exvba/0150086.html

回答
投稿日時: 20/04/11 09:13:19
投稿者: MMYS

  With CreateObject("WScript.Shell")
    od = .ExpandEnvironmentStrings("%OneDrive%")
  End With
  MsgBox od

環境変数に %OneDrive%" の公式見解が無いので
使用は自己責任で。
 

回答
投稿日時: 20/04/11 09:21:22
投稿者: WinArrow
投稿者のウェブサイトに移動

月 さん
 
https://www.moug.net/tech/exvba/0150086.html
こちらでテストした結果、パスを取得することが
確認できました。

回答
投稿日時: 20/04/11 10:14:17
投稿者: 月

WinArrowさん、ありがとうございます。
 
質問者さんの環境のWindows 7やOneDriveのバージョンによって、環境変数の有無は変わらないだろうかとも思っています。ですので、使う前にはドキュメントを確認したり、社内の他のPCも確認しておいた方が良いと思います。
(環境変数がなかったらエラーとする処理を入れても良いと思います。)
 
いずれにしろ、レジストリとかどこかには記録されているのではないかなぁという期待がありました。

回答
投稿日時: 20/04/11 16:32:49
投稿者: WinArrow
投稿者のウェブサイトに移動

月 さん
 
コメントありがとうございます。
 
確かに、Win7の環境には「OneDrive」という環境変数はないようです。
 
代替案で
%USERPROFILE%\OneDrive
が使えるかも?
 
テストしていません。

回答
投稿日時: 20/04/11 18:09:17
投稿者: WinArrow
投稿者のウェブサイトに移動

MMYSさんのコードを拝借して
 
Sub Sample()
Dim OD
  With CreateObject("WScript.Shell")
    OD = .ExpandEnvironmentStrings("%USERPROFILE%\OneDrive")
  End With
  MsgBox OD
End Sub
で、いかがでしょうか?

投稿日時: 20/04/13 07:50:25
投稿者: ふしぎちゃん

お世話になります。
 
皆さん色々なアドバイスを頂き
有難うございます。
 
未熟なため、皆さんのアドバイスを基に
試してみます。
 
その中でまたわからないことがありましたら
追記させて頂きます。
 

投稿日時: 20/04/13 10:39:22
投稿者: ふしぎちゃん

お世話になります。
 
"%USERPROFILE%\OneDrive"では
CドライブのOneDriveを取得したので
MMYSさんの最初の案で
作成するとDドライブを取得してくれました。
 
下記の内容でできました。
有難うございました。
(初心者の私が作成したつぎはぎの構文で
 無駄なところもあると思いますが…)
 
他のPCで試していないので
もう少し、このまま置かせてください。
 
 
 
Sub エクセル保存()
 
Dim OD
Dim strFile As String
Dim Ntime As String
Dim fileName As String
Dim thisPath As String
 
  With CreateObject("WScript.Shell")
    OD = .ExpandEnvironmentStrings("%OneDrive%")
  End With
 
    Ntime = Now
 
    fileName = Format(Ntime, "yyyymmddhhnn") & "予定表"
 
  thisPath = od
 
    strFile = thisPath & "\共有A\参照フォルダ\" & fileName
 
    ActiveWorkbook.SaveAs strFile & ".xlsm"
 
 
End Sub

投稿日時: 20/04/13 14:32:55
投稿者: ふしぎちゃん

お世話になります。
 
他のPC(windows10)でも
問題なくできました。
 
本当に有難うございました。