[[20190924153754]] 『保存場所の変更』(ローム) ページの最後に飛ぶ

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

 

『保存場所の変更』(ローム)

よろしくお願いします。
Openメソッドなどを使って外部ファイルを開けるときなど、
フルパスで外部ブックを指定してます。
素人ながら色々VBAを使ったファイルを作成していたのですが、
私が長期間会社を離れている間にユーザー変更やファイルの保管場所移動などがありまして。
VBAのパスは固定でしたので、当然、コードは作動しません。
色々調べて、フォルダ名等を変数に格納して可変?にすることはできたのですが、
この方法だと、保存場所のフォルダの数(階層?)が変わったりしたら対応できません。

教えて下さい。保存場所(階層)が変わってもパスを自動的に指定することはできますか?
それとも、やはりVBAが使える人がいなければエクセルのマクロファイル
(特に私のような素人が作った物)はいずれ壊れてしまうのでしょうか。

< 使用 Excel:Excel2010、使用 OS:Windows7 >


>色々調べて、フォルダ名等を変数に格納して可変?にすることはできたのですが、
実際のものでなくてたとえで良いのでどのようなコードなのか提示できませんか?

>保存場所(階層)が変わってもパスを自動的に指定することはできますか?
相対パスで記述できるなら可能と思われます。
しかし、そこまで考えずフォルダをユーザーに指定してもらう方が現実的では?
http://officetanaka.net/excel/vba/tips/tips39.htm

(もこな2) 2019/09/24(火) 18:23


 >保存場所(階層)が変わってもパスを自動的に指定することはできますか? 

 常識的に無理じゃないですか?

 当該パス名が、PCの中で絶対一つしかないなら、何とかできるかも知れませんが、
 同名でコピーを作る操作なんて頻繁に行われますから、確実な事務には向かないです。

 >やはりVBAが使える人がいなければエクセルのマクロファイル 
 >(特に私のような素人が作った物)はいずれ壊れてしまうのでしょうか。

 ちょっとニュアンスが分かりにくいですが、素人であろうがなかろうが、
 自分の知らないところで、保存場所(階層)が変えられるなんて事が許される状況にあるなら、
 自分は相手の都合に合わせるしかない弱者であり、弱者が作るシステムの寿命は短いです。

(半平太) 2019/09/24(火) 18:36


もなこ2さん、

 >実際のものでなくてたとえで良いのでどのようなコードなのか提示できませんか?

会社にしかパソコンはないので実際のものは提示できませんが、
ワークシート上にCell関数でファイルネームを取得。
フォルダ名だけ抽出してセルの値を変数に格納、
というものです。

半平太さん、今回の保存場所移動の件は詳細は書けませんが仕方のないことであり、
また滅多に起こることではないです。
ただ、今回の件で場所を変えると動かなくなるということを
職場の殆どが理解していないことがわかったので、何か方法があればと質問させてもらいました。

回答ありがとうございます。

最後に。

 >当該パス名が、PCの中で絶対一つしかないなら、何とかできるかも知れませんが、

これは、例えばBook1をコピーして、Book1(1)ができても、だめということでしょうか。
(ローム) 2019/09/24(火) 19:02


 その外部ファイルを密告者(笑)にしてはどうでしょう?
 あまりおすすめの方法ではないですが。

 「外部ファイル」を起動したり保存したりするたびに、
 自分のフルパスを特定のテキストファイルに書き込む
 ようにします。

 「外部ファイル」をOpenメソッドなどで開く場合は、
 そのテキストファイルからパスを読み込むようにします。

 ただ、「外部ファイル」がコピーされて複数になった場合
 は最後に保存された「外部ファイル」が対象になります
 し、「外部ファイル」がマクロが起動しない方法で開かれ
 た場合は自分の居場所を密告してくれません。
(OK) 2019/09/24(火) 19:10

そんな方法もあるんですね!
ただ、外部ファイルは月で管理しており、
毎月コピーしてます。過去の月のファイルを
開くこともあるので今回は難しいですね。
ただ色々応用できそうな仕組みです。
ありがとうございます!
(ローム) 2019/09/24(火) 19:27

 >これは、例えばBook1をコピーして、Book1(1)ができても、だめということでしょうか。

 それは同じファイル名とは言えないですから、関係ないです。

 ・・と言うか、ファイル名の話なんでしょうか?

 「ファイルの保管場所移動」との事なので、フォルダ丸ごとの移動
 (またはコピー、または別のパス上の新規同名フォルダ作成)を想起していたのですが。

(半平太) 2019/09/24(火) 20:25


あー、なるほど。
やはりパスについて知識が足りてないですね……。
フォルダのコピーはないです。
すみませんでした。
(ローム) 2019/09/24(火) 20:41

書いてる間に編集かぶっちゃっいましたがとりあえず。

なんかF1グランプリが始まりそうな名前になってますけど、細かいことはいいや・・・
>ワークシート上にCell関数でファイルネームを取得。
>フォルダ名だけ抽出してセルの値を変数に格納、
>というものです。

そんな面倒な方法にしなくてもよくないです?
↓を一度保存したブックにコピペして実行してみてください。

    Sub 実験()
        Dim MySTR As String

        With ThisWorkbook
            MySTR = MySTR & "【ブック名】" & vbCrLf & "  "
            MySTR = MySTR & .Name & vbCrLf & vbCrLf

            MySTR = MySTR & "【格納されているフォルダ】" & vbCrLf & "  "
            MySTR = MySTR & .Path & vbCrLf & vbCrLf

            MySTR = MySTR & "【フルパス】" & vbCrLf & "  "
            MySTR = MySTR & .FullName
        End With

        MsgBox MySTR
    End Sub

また、
>外部ファイルは月で管理しており、
>毎月コピーしてます。過去の月のファイルを
>開くこともあるので今回は難しいですね。
これもよくわからないけど、月ごとならなんかルール(規則性)あるんじゃないですか?

 例
 C:\Work\2019\09 ←9月分を保存
 C:\Work\2019\10 ←10月分を保存

 '------以下 追加コメントをみてからです------

>フォルダのコピーはないです。
えっと、実際にやりたいことはなんでしょ?
コードも提示できないということですし、こちらではわからないところがわからないのです・・・

(もこな2) 2019/09/24(火) 20:46


ロームさんのお話から考えると
ファイル保管場所を変えたときの操作を決めてマニュアル化する、
というのが一番近道のように思います。
あるいはdirでエラーのときにファイル参照に持っていくとか。

もこな2さんの2019/09/24(火) 18:23の回答中のレスにある
ファイル参照を用いて、ファイルパスをセルに書き込むというのが良さそうに思います。
(黄色い循環参照) 2019/09/24(火) 21:28


もなこ2さん、黄色い循環参照さん、ありがとうございます。
黄色い循環参照さんの提示方法イメージできました。
もなこ2さんが紹介したサイトと、頂いたコードを使ってやってみようと思います。
返答は明日以降になると思います。
こんなわかりにくい質問に答えて頂き、本当にありがとうございます。
(ローム) 2019/09/24(火) 21:56

 参考になれば ですが

 私の場合は、参照ファイルや、マスタ などは、外部ファイル(テキストファイルが多いです)
 において、マクロブックを開くたびにそれを参照するようにしています。

 マニュアルには、ファイルパスなど変更があった場合は、
 外部ファイルを修正することとしています。

 もちろん、外部ファイルの修正ミスも考えられるので、起動時のファイルチェックは欠かせませんが。

 それと、マクロファイル本体については、指定パスにない場合や、ファイル名が変更された場合は
 メッセージを出して、起動不可とする場合もあります。

 参考まで

(渡辺ひかる) 2019/09/25(水) 09:52


ありがとうございます。
やはりマニュアルは必須ですよね。
とても参考になります。
(ローム) 2019/09/25(水) 10:31

 私だったらシリーズですが、
登録みたいなボタンを作っておいて
変更時はオペレーターにポンポンと
選択出来る様な形で登録してもうのはどうでしょうか?

(SoulMan) 2019/09/25(水) 19:35


 めんどいなら、Getopenで都度選ばせれば済むけど・・・。
(BJ) 2019/09/25(水) 19:49

SoulManさん、ありがとうございます。参考になります。
BJさん、Getopen、初めて知りました。そちらも試して見ます。

参考サイトを組み合わせて組んで見ました。
一応、イメージ通りの動きはします。(完成コードをくっつけただけなので当然ですが…)
スマホから書き込んだのでタイプミスしてるかもしれません。
皆様ありがとうございました。

 sub test()
     Dim Ws As Worksheet
     set Ws Sheets("Sheet1")
     target = Range("A1").Value
     If Dir(target) <>"" Then
         Workbooks.Open target
     Else
         Msgbox target & vbCrLf & "が存在しません。" & Chr(13) & "フォルダを開きます。リンクさせるファイルを選択してください。"
         With Application.FileDialog(msoFileDialogFilePicker)
             If .Show = True Then
                 Ws.Range("A1").Value = .SelectedItems(1)
                 target = Range("A1").Value
                 Workbooks.Open target
             End If
         End With
     End If
 End Sub
(ローム) 2019/09/25(水) 22:34

コメント返信:

[ 一覧(最新更新順) ]


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