質問編集履歴

1

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

2022/01/07 00:47

投稿

KenzTanak
KenzTanak

スコア0

test CHANGED
File without changes
test CHANGED
@@ -1,7 +1,103 @@
1
1
  ExcelVBAにて「*.abc」のような拡張子でファイルを出力するプログラムを開発しています。
2
2
 
3
- ファイル名はユーザに指定させたいため、GetSaveAsFilename、FileDialog(msoFileDialogSaveAs)を試したのですが、いずれも拡張子を指定することができませんでした。
3
+ ファイル名はユーザに指定させたいため、FileDialog(msoFileDialogSaveAs)を試したのですが、いずれも拡張子を指定することができませんでした。
4
4
 
5
5
 
6
6
 
7
7
  何か方法はありますでしょうか。
8
+
9
+ 以下、検証したコードです。
10
+
11
+
12
+
13
+ (1) Filterを指定せず、ファイル名の初期値のみを設定するとファイル名欄に「aaa.abc.xlsx」と表示されてしまう
14
+
15
+ ```ExcelVBA
16
+
17
+ Sub test1()
18
+
19
+ With Application.FileDialog(msoFileDialogSaveAs)
20
+
21
+ .InitialFileName = "aaa.abc"
22
+
23
+ .Title = "出力ファイルの指定"
24
+
25
+ If .Show = True Then
26
+
27
+ MsgBox "指定ファイルは" & vbLf & .SelectedItems(1)
28
+
29
+ End If
30
+
31
+ End With
32
+
33
+ End Sub
34
+
35
+ ```
36
+
37
+ (2) Filterを「.abc」だけにするためClearを行うと、実行時エラー438「オブジェクトは、このプロパティまたはメソッドをサポートしていません」となる(msoFileDialogSaveAsの場合はFilterは変更不可)
38
+
39
+ ※ Addのみとしても同様
40
+
41
+ ```ExcelVBA
42
+
43
+ Sub test2()
44
+
45
+ With Application.FileDialog(msoFileDialogSaveAs)
46
+
47
+ .InitialFileName = "aaa.abc"
48
+
49
+ With .Filters
50
+
51
+ .Clear
52
+
53
+ .Add "abcファイル", "*.abc", 1
54
+
55
+ End With
56
+
57
+ .Title = "出力ファイルの指定"
58
+
59
+ If .Show = True Then
60
+
61
+ MsgBox "指定ファイルは" & vbLf & .SelectedItems(1)
62
+
63
+ End If
64
+
65
+ End With
66
+
67
+ End Sub
68
+
69
+ ```
70
+
71
+
72
+
73
+ (3) Filter条件が指定できるファイルオープンダイアログにすると、存在するファイルしか指定できないため、OKボタン押下時にエラーとなってしまう。(msoFileDialogFilePickerを指定しても同様)
74
+
75
+ ```ExcelVBA
76
+
77
+ Sub test3()
78
+
79
+ With Application.FileDialog(msoFileDialogOpen)
80
+
81
+ .InitialFileName = "aaa.abc"
82
+
83
+ With .Filters
84
+
85
+ .Clear
86
+
87
+ .Add "abcファイル", "*.abc", 1
88
+
89
+ End With
90
+
91
+ .Title = "出力ファイルの指定"
92
+
93
+ If .Show = True Then
94
+
95
+ MsgBox "指定ファイルは" & vbLf & .SelectedItems(1)
96
+
97
+ End If
98
+
99
+ End With
100
+
101
+ End Sub
102
+
103
+ ```