[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『保存場所の変更』(ローム)
よろしくお願いします。
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
>実際のものでなくてたとえで良いのでどのようなコードなのか提示できませんか?
会社にしかパソコンはないので実際のものは提示できませんが、
ワークシート上にCell関数でファイルネームを取得。
フォルダ名だけ抽出してセルの値を変数に格納、
というものです。
半平太さん、今回の保存場所移動の件は詳細は書けませんが仕方のないことであり、
また滅多に起こることではないです。
ただ、今回の件で場所を変えると動かなくなるということを
職場の殆どが理解していないことがわかったので、何か方法があればと質問させてもらいました。
回答ありがとうございます。
最後に。
>当該パス名が、PCの中で絶対一つしかないなら、何とかできるかも知れませんが、
これは、例えばBook1をコピーして、Book1(1)ができても、だめということでしょうか。
(ローム) 2019/09/24(火) 19:02
その外部ファイルを密告者(笑)にしてはどうでしょう? あまりおすすめの方法ではないですが。
「外部ファイル」を起動したり保存したりするたびに、 自分のフルパスを特定のテキストファイルに書き込む ようにします。
「外部ファイル」をOpenメソッドなどで開く場合は、 そのテキストファイルからパスを読み込むようにします。
ただ、「外部ファイル」がコピーされて複数になった場合 は最後に保存された「外部ファイル」が対象になります し、「外部ファイル」がマクロが起動しない方法で開かれ た場合は自分の居場所を密告してくれません。 (OK) 2019/09/24(火) 19:10
>これは、例えばBook1をコピーして、Book1(1)ができても、だめということでしょうか。
それは同じファイル名とは言えないですから、関係ないです。
・・と言うか、ファイル名の話なんでしょうか?
「ファイルの保管場所移動」との事なので、フォルダ丸ごとの移動 (またはコピー、または別のパス上の新規同名フォルダ作成)を想起していたのですが。
(半平太) 2019/09/24(火) 20:25
なんか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
もこな2さんの2019/09/24(火) 18:23の回答中のレスにある
ファイル参照を用いて、ファイルパスをセルに書き込むというのが良さそうに思います。
(黄色い循環参照) 2019/09/24(火) 21:28
参考になれば ですが
私の場合は、参照ファイルや、マスタ などは、外部ファイル(テキストファイルが多いです) において、マクロブックを開くたびにそれを参照するようにしています。
マニュアルには、ファイルパスなど変更があった場合は、 外部ファイルを修正することとしています。
もちろん、外部ファイルの修正ミスも考えられるので、起動時のファイルチェックは欠かせませんが。
それと、マクロファイル本体については、指定パスにない場合や、ファイル名が変更された場合は メッセージを出して、起動不可とする場合もあります。
参考まで
(渡辺ひかる) 2019/09/25(水) 09:52
私だったらシリーズですが、 登録みたいなボタンを作っておいて 変更時はオペレーターにポンポンと 選択出来る様な形で登録してもうのはどうでしょうか?
(SoulMan) 2019/09/25(水) 19:35
めんどいなら、Getopenで都度選ばせれば済むけど・・・。 (BJ) 2019/09/25(水) 19:49
参考サイトを組み合わせて組んで見ました。
一応、イメージ通りの動きはします。(完成コードをくっつけただけなので当然ですが…)
スマホから書き込んだのでタイプミスしてるかもしれません。
皆様ありがとうございました。
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.