[[20231026112341]] 『Application.GetOpenFilenameについて』(リー) ページの最後に飛ぶ

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

 

『Application.GetOpenFilenameについて』(リー)

VBA中で Application.GetOpenFilename を使ってファイルのオープンを行っていますが、このダイアログに、特定の文字列を含むファイルのみ表示させることはできないものでしょうか?
例えばファイルの一部に「ABC」が含まれる xlsx だけとかです。
ご教示ください。よろしくお願いいたします。

< 使用 Excel:Microsoft365、使用 OS:Windows11 >


ワイルドカードで指定できるので、可能ですね。

参考
https://learn.microsoft.com/ja-jp/office/vba/api/excel.application.getopenfilename
(tkit) 2023/10/26(木) 11:37:23


 念のための確認です。ファイル名のなかにですか。ファイルの中身にですか?
(確認質問) 2023/10/26(木) 11:55:03

レス有難うございます。
もちろんファイル名です。
あと、このワイルドカードはダイアログ中の「ファイル名」の横の「ファイル候補」に適用されるもののようで、用途が違うと思われます。
なので、要望を満たす(名前に特定の文字列を含むファイルのみ表示)にはどのように記述すれば教えていただきたいです。

(リー) 2023/10/26(木) 12:09:31


 了解です。正確に書かずに、後になって食い違う事が結構あるんですよ。
 そのメソッドそのものでは無理だと思います。
 FSOでファイルを全列挙して、候補に合うものをシートに書き出すのが手取り早いでしょう。
(確認質問) 2023/10/26(木) 12:55:53

 では、Application.FileDialog で。
 FileDialog.Filters.InitialFileNameプロパティで、
 ワイルドカードで"*ABC*.xlsx"
 とでもしてください。

(tkit) 2023/10/26(木) 13:07:32


 いや失礼しました。
 拡張子はFileFilterで絞って、
 「ファイル名」のところにワイルドカードを使ったファイル名を手動で入力すれば、ファイル名で絞れました。
 (拡張子指定も含めて「ファイル名」のことろに手動で入れてもいいかも)

(確認質問) 2023/10/26(木) 13:52:47


tkitさん有難うございます。
Application.GetOpenFilenameでは無理そうなので、Application.FileDialogではありませんが、ごそごそやってたらApplication.Dialogsで、希望の動きが簡単に実現できました。
一応ご報告です。

(リー) 2023/10/26(木) 13:59:32


 こんな方法も

 Sub a()
     SendKeys "*abc*.xlsx~"
     Application.GetOpenFilename
 End Sub

(ねむねむ) 2023/10/26(木) 14:05:03


 忘れてた。
 SendKeys使うとNumLockはずれる副作用があった。

 使わないほうがいいか。
(ねむねむ) 2023/10/26(木) 14:09:03

>Application.Dialogsで、希望の動きが簡単に実現できました。

Application.Dialogsを用いて、希望の動作を実現することが
思いつかないので、後学のために、コードをのせてください。
(tkit) 2023/10/26(木) 14:21:39


ねむねむさん
有難うございます。
なるほど、こんなことできるんですね。
やってみたら確かに実行するたびにNumLockが消えたりついたりしてました。

tkitさん
私は下のようなコードにしました。
f_list = Application.Dialogs(xlDialogOpen).Show("*ABC*.xls?")

ちなみに、tkitさんの実際のコードものせてください。

(リー) 2023/10/26(木) 14:36:32


 直接開くより、パス取得することがほとんどなので、
 こちらを多用しています。
 FileDialogの引数で可能です。

https://excel-ubara.com/excelvba1/EXCELVBA376.html

 Sub Sample()
     With Application.FileDialog(msoFileDialogOpen)
         .Filters.Clear
         .Filters.Add "Excelブック", "*.xlsx"
         .InitialFileName = "*\*ABC*.xlsx"
         If .Show = True Then .Execute
     End With
 End Sub

(tkit) 2023/10/26(木) 15:00:14


 主要な方法ではありませんが、SendKeysについてのTipsです。

 Application.SneKeysを使うと,Numlockが外れたり、他のキーへの影響があるようでバギーです。
[[20221013171915]]でも議論されていますが、
 WshShellのSendkeysを使えば確実に回避できます。
https://qiita.com/nukie_53/items/f069a1e48cddca0024c2
 を参考にしてください。
(xyz) 2023/10/26(木) 15:53:59

コメント返信:

[ 一覧(最新更新順) ]


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