質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

Q&A

解決済

3回答

12800閲覧

VBA FileDialogで初期表示されるファイル名を全文表示したい

退会済みユーザー

退会済みユーザー

総合スコア0

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Office 365

Office 365は、マイクロソフトが販売している企業向けクラウドベースのグループウエアサービス。電子メールや予定表、Webサイト構築、オンラインストレージ、ビデオ会議などビジネスで必要な機能を備えています。クラウドサービスのため、自社での専用サーバーの設置の必要がないことが特徴です。

0グッド

0クリップ

投稿2020/06/24 01:35

編集2020/06/24 01:37

お世話になっております。
今回はVBAのApplication.FileDialogについて質問させていただきます。
使っているOfficeはOffice365です。

  1. FileDialogで対象のExcelファイルを取得する

今回、ExcelファイルのとりまとめツールをVBAで作りました。
指定したExcelファイルを取得して、その中から特定の条件の行を取得し、別のExcelに出力するというものです。
指定ExcelはApplication.FileDialogを使って取得するようにしています。

VBA

1'/* ファイルダイアログボックス表示 2Private Function FileDialog(Optional strInitialFileName As String = "") As String 3 4 Dim strRtn As String 5 Dim afd As Object 6 Dim strPath As String 7 Dim strName As String 8 9 Set afd = Application.FileDialog(msoFileDialogFilePicker) 10 11 afd.InitialFileName = strInitialFileName 12 13 strRtn = "" 14 15 If afd.Show = True Then 16 strRtn = afd.SelectedItems(1) 17 End If 18 19 FileDialog = strRtn 20 21End Function
  1. 何がダメなのか

ダイアログを開く際、既にフルパスがあればそのフルパスをInitialFileNameに設定しています。
開いた後、InitalFileNameに設定したフォルダ階層・ファイル名が表示されるのですが、
ファイル名が見切れています。
イメージ説明

3.探したキーワード

・「VBA FileDialog バグ」
・「VBA FileDialog 見切れている」
・「VBA FileDialog ファイル名 表示されない」
などで検索しましたが、該当するリファレンスが見つかりませんでした。

細かい修正箇所ですが、納品先がどうしても気になるので直してほしいとの事でした。
何かご存知でしたら、助力願います。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

Windows API GetSaveFileName(comdlg32.dll) を使っても、同じような現象でした。

おそらく、仕様かちょっとした不具合だと思います。

あきらめましょう。

投稿2020/06/28 05:21

kai_keitai

総合スコア344

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2020/06/29 07:22

そうですか…あきらめます
guest

0

設計の見直しを検討してみてはいかがでしょうか。

こちらで本来求めたいのは、抽出元パスを決めることではないでしょうか。
見た目「ファイル名が見切れています。」や、そもそもの仕様挙動「そのフルパスをInitialFileNameに設定」にこだわる必要性はさほどないように感じられます。

であれば、そもそも参照パスでフルパスが入力されているケースを考えた場合、
すでに指定されたパスにファイルが存在していること自体が入力者にとっては自明であるため、と考えます。でなければ入力すらせず参照ボタン押しますよね。

であれば機能としては、以下に調整できないでしょうか。
まずは、以下の理解を求めたうえで改善となるわけですが・・・。

  • 機能のFileDialog仕様では、15文字以上については、もともとそういう表示をしてしまう機能動作であること

改善としてはざっと以下の形でしょうか。

  • InitialFileNameでは、ファイル名については触れずフォルダ選択(例:'D:\Test')とする※
  • FileDialogの初回ファイル名はあえて表示させない。(ユーザーのファイル選択を重視する)
  • フルパスで入力されていた場合は、ファイルの存在チェックのみとし、FileDialogは表示させない※

という形であれば、ユーザー側にとっては、見た目よりは、
機能性を重視した理解が得られるのではないでしょうか?

※フルパスが間違っていた場合の、ユーザーの入力補助として、パスのフォルダの表示を試みる
もちろんディレクトリの存在確認は実施しておく

投稿2020/06/24 14:28

lib

総合スコア446

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

実機で確認してみましたが、おっしゃる通りFileDialogのファイル名が左側にずれました。
右から半角14文字~16文字くらいの幅が終端になるような表示になっています。

他の方法でダイアログを表示する方法を考えてみました。
簡単なところではGetSaveAsFilenameを使用することでファイル名が見切れないようにできました。ただ、右下のボタンが[保存]になり、変更はできないようです。

VBA

1'/* ファイルダイアログボックス表示 2Private Function FileDialog(Optional strInitialFileName As String = "") As String 3 4 Dim strRtn As String 5 Dim afd As Object 6 Dim strPath As String 7 Dim strName As String 8 9 strRtn = Application.GetSaveAsFilename( _ 10 InitialFileName:=strInitialFileName, _ 11 Title:="参照", _ 12 FileFilter:="Excelファイル,*.xlsx,すべてのファイル,*.*", _ 13 FilterIndex:=1) 14 15 FileDialog = strRtn 16 17End Function

他にも任意の指定でシステムダイアログを出す方法があるかもしれません。

投稿2020/06/24 12:57

編集2020/06/29 12:05
etsuhisa

総合スコア416

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問