[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『任意のフォルダ取得方法』(万年じじい)
任意のフォルダを検索する手段の1つとしてダイアログをオープンして
Application.Dialogs(xlDialogOpen).Show と記述する方法を取っていますが、
ファイル名をクリックするかキャンセルしないと閉じることができず、又閉じる時、
そのPath名を記録できない?のでファイルを開けないでそのファイルが入っているフォルダ名を取得する方法があったら、教えて下さいますか?
< 使用 Excel:Excel2010、使用 OS:Windows7 >
色んなフォルダパス取得の方法がありますが、ダイアログ形式だと 何らかのクリックが必要になると思います。
どういう作業でフォルダパスを取得したいのでしょう? (カリーニン) 2017/10/04(水) 10:44
Application.GetOpenFilename だとパス名+ファイル名は取得するが実際には開かないのでそこからパス名を取り出してはどうか。 フォルダ内のファイルを確認する必要がない(フォルダだけわかればいい)場合は下記を参考に
http://officetanaka.net/excel/vba/tips/tips39.htm
(ねむねむ) 2017/10/04(水) 11:22
Sub test() Dim cPath As String Dim cFile As String Dim iR As Long
With Application.FileDialog(msoFileDialogFolderPicker) If .Show = True Then cPath = .SelectedItems(1) If Right(cPath, 1) <> "\" Then cPath = cPath & "\" End If Else Exit Sub End If End With
cFile = Dir(cPath & "*.*") While cFile <> "" iR = iR + 1 ActiveSheet.Cells(iR, "A").Value = cPath & "\" & cFile cFile = Dir Wend End Sub (???) 2017/10/04(水) 11:28
???さん、高尚な事例、ありがとうございます。まさにこれが欲しかったのです。今回はこれを即実行させて頂きます。(少し修正)→Pathを省いてfile名のみ記述
(万年じじい) 2017/10/04(水) 13:39
cFile = Dir(cPath & "*.*") While cFile <> "" iR = iR + 1 ActiveSheet.Cells(iR, "A").Value = cFile cFile = Dir ActiveSheet.Cells(iR, "B").Value = GetBaseName(cPath) ActiveSheet.Cells(iR, "C").Value = GetExtensionName(cPath) Wend
(万年じじい) 2017/10/04(水) 15:02
"Scripting.FileSystemObject" のSetが行われてないのでは? (カリーニン) 2017/10/04(水) 15:14
Dim fn,kt as string と定義した上で
Set Tmm=CreateObject("Scripting.FileSystemObject")
Set fn=Tmm.GetBaseName(cPath)
Set kt=Tmm.GetExtensionName(cPath)
と記述したところ、「コンパイルエラー:オブジェクトが必要です」と表示されました。
増々わからなくなりました。
(万年じじい) 2017/10/04(水) 16:12
Setはオブジェクト変数にオブジェクトをセットするもの。 >Set fn=Tmm.GetBaseName(cPath) >Set kt=Tmm.GetExtensionName(cPath) は結果の値を変数に入れるのだから単純な代入でいい。 fn=Tmm.GetBaseName(cPath) kt=Tmm.GetExtensionName(cPath (ねむねむ) 2017/10/04(水) 16:15
あと、本題とは関係ないが Dim fn,kt as string はktは文字列型になるがfnはバリアント型になる。 両方文字列型とするには Dim fn As String, kt As String で。 (ねむねむ) 2017/10/04(水) 16:22
(万年じじい) 2017/10/04(水) 17:16
もうひとつの、CreateObject("Scripting.FileSystemObject") を使う方法は、この Set文を実行した際に FileSystemObject がメモリに載ります。 事前に型はわからないので、汎用オブジェクト型の Object型として配列宣言すれば良いです。 こっちの方法は、レイトバインドと呼びます。
いずれにせよ、Excel標準ではないオブジェクトなので、使いたいならば、他人には頼らずに、ご自身で調べきることを覚悟して使ってください。 標準ではDir関数があるのですから、そちらを使うべきですよ。
(???) 2017/10/04(水) 18:06
(万年じじい) 2017/10/05(木) 11:08
ご覧の通り、Excelの話なんて出てこないのですが、windowsのアプリ構造は共通性のある仕組みになっているので、使える訳ですね。(プロパティとかメソッドとあるものが重要な情報です) 他にも、調べると .NETやC#用のフレームワークにたどり着く事も多いです。 ツリーをさかのぼってみると、いろいろ小難しい用語が沢山でてきて、さっぱり判らない事でしょう。 難しい内容が多すぎて、こういう技術をいちいち質問・回答していたのでは、答えきれない訳です。 だから自力で捜せない人、試さない人には、使わない事をお薦めするのですよ。
といっても、これらのオブジェクトを使う人が全員Microsoftのドキュメントに目を通しているのではなく、誰かが有効利用したコードを見つけて、それを真似たり応用したりして広まっている感じです。 自力でWeb検索して解決できるならば、完全理解せずとも使える、という訳ですね。 これはアリだと思っています。
(???) 2017/10/05(木) 11:36
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.