teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

1

試したソースコードを追加

2022/01/07 00:47

投稿

KenzTanak
KenzTanak

スコア0

title CHANGED
File without changes
body CHANGED
@@ -1,4 +1,52 @@
1
1
  ExcelVBAにて「*.abc」のような拡張子でファイルを出力するプログラムを開発しています。
2
- ファイル名はユーザに指定させたいため、GetSaveAsFilename、FileDialog(msoFileDialogSaveAs)を試したのですが、いずれも拡張子を指定することができませんでした。
2
+ ファイル名はユーザに指定させたいため、FileDialog(msoFileDialogSaveAs)を試したのですが、いずれも拡張子を指定することができませんでした。
3
3
 
4
- 何か方法はありますでしょうか。
4
+ 何か方法はありますでしょうか。
5
+ 以下、検証したコードです。
6
+
7
+ (1) Filterを指定せず、ファイル名の初期値のみを設定するとファイル名欄に「aaa.abc.xlsx」と表示されてしまう
8
+ ```ExcelVBA
9
+ Sub test1()
10
+ With Application.FileDialog(msoFileDialogSaveAs)
11
+ .InitialFileName = "aaa.abc"
12
+ .Title = "出力ファイルの指定"
13
+ If .Show = True Then
14
+ MsgBox "指定ファイルは" & vbLf & .SelectedItems(1)
15
+ End If
16
+ End With
17
+ End Sub
18
+ ```
19
+ (2) Filterを「.abc」だけにするためClearを行うと、実行時エラー438「オブジェクトは、このプロパティまたはメソッドをサポートしていません」となる(msoFileDialogSaveAsの場合はFilterは変更不可)
20
+ ※ Addのみとしても同様
21
+ ```ExcelVBA
22
+ Sub test2()
23
+ With Application.FileDialog(msoFileDialogSaveAs)
24
+ .InitialFileName = "aaa.abc"
25
+ With .Filters
26
+ .Clear
27
+ .Add "abcファイル", "*.abc", 1
28
+ End With
29
+ .Title = "出力ファイルの指定"
30
+ If .Show = True Then
31
+ MsgBox "指定ファイルは" & vbLf & .SelectedItems(1)
32
+ End If
33
+ End With
34
+ End Sub
35
+ ```
36
+
37
+ (3) Filter条件が指定できるファイルオープンダイアログにすると、存在するファイルしか指定できないため、OKボタン押下時にエラーとなってしまう。(msoFileDialogFilePickerを指定しても同様)
38
+ ```ExcelVBA
39
+ Sub test3()
40
+ With Application.FileDialog(msoFileDialogOpen)
41
+ .InitialFileName = "aaa.abc"
42
+ With .Filters
43
+ .Clear
44
+ .Add "abcファイル", "*.abc", 1
45
+ End With
46
+ .Title = "出力ファイルの指定"
47
+ If .Show = True Then
48
+ MsgBox "指定ファイルは" & vbLf & .SelectedItems(1)
49
+ End If
50
+ End With
51
+ End Sub
52
+ ```