質問編集履歴
1
試したソースコードを追加
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,4 +1,52 @@
|
|
1
1
|
ExcelVBAにて「*.abc」のような拡張子でファイルを出力するプログラムを開発しています。
|
2
|
-
ファイル名はユーザに指定させたいため、
|
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
|
+
```
|