Contents
ユーザーからファイル名を取得するために、[名前を付けて保存] ダイアログ ボックスを表示します。ダイアログ ボックスで指定したファイルは、実際には保存されません。保存処理をするにはWorkbook.SaveAsを使います。
- 構文
- UString
= Application.GetSaveAsFilename( InitialFilename, FileFilter, FilterIndex, Title, ButtonText )
- 引数
- InitialFilename 省略可
- 既定値として表示するファイル名を指定します。 この引数を省略すると、作業中のブックの名前が使われます。
- FileFilter 省略可
- ファイルの候補を指定する文字列(ファイルフィルター文字列)を指定します。最大長は255文字です。
- FilterIndex 省略可
- 引数FileFilterで指定したファイルフィルター文字列の中で、1から何番目の値を既定値とするかを指定します。この引数を省略するか、ファイルフィルター文字列の数より大きい数値を指定すると、最初のファイルフィルター文字列が既定値となります。
- Title 省略可
- ダイアログボックスのタイトルを指定します。この引数を省略すると既定のタイトルが使用されます。
- ButtonText 省略可
- Macintoshでのみ指定できます。
- 戻り値
- ファイル名に指定したパス。キャンセルした場合はFalseが返る。
ダイアログボックスの初期フォルダ
ダイアログボックスの初期フォルダは、以下のプログラムで取得できます。
PRINT Excel.Application.DefaultFilePath
プログラム実行例
[名前を付けて保存]ダイアログを表示して保存
[名前を付けて保存]ダイアログを表示し、既定値として「売上一覧.xlsx」という名前を指定します。
DIM Excel = CREATEOLEOBJ(“Excel.Application”)
Excel.Visible = TRUE
Excel.Workbooks.Add()
DIM path = Excel.Application.GetSaveAsFilename(“売上一覧.xlsx”, “Excel ブック, *.xlsx, すべてのファイル, *.*”)
IFB path = FALSE THEN
PRINT “キャンセルされました”
ELSE
Excel.ActiveWorkbook.SaveAs(path)
ENDIF
解説
- 1行目
- Excelを起動。
DIM Excel = CREATEOLEOBJ(“Excel.Application”)
- 2行目
- Excelの画面を表示。
Excel.Visible = TRUE
- 3行目
- 新しいブックを追加する。
Excel.Workbooks.Add()
- 5行目
- [名前を付けて保存]ダイアログボックスを表示し、ファイル名に「売上一覧.xlsx」を既定値として入力。ファイルの種類は「*.xlsx」、「*.*」を選択できるようにし、「*.xlsx」を既定値として選択。
DIM path = Excel.Application.GetSaveAsFilename(“売上一覧.xlsx”, “Excel ブック, *.xlsx, すべてのファイル, *.*”)
- 7-11行目
- [キャンセル]が選択された場合、戻り値としてFalseが返るのでそのときは「キャンセルされました」と出力。[保存]が選択された場合、保存先のパスが返るのでSaveAsメソッドで保存処理を行う。
IFB path = FALSE THEN PRINT “キャンセルされました” ELSE Excel.ActiveWorkbook.SaveAs(path) ENDIF
[名前を付けて保存]ダイアログを表示して保存(同名ファイルの競合対策)
GetSaveAsFilenameの第一引数(InitialFilename)で重複しないファイル名を既定値として入力します。
SaveAsでファイル名が重複する場合「置き換えますか?」で「いいえ」を選択するとエラーが発生するので、その際は再度ファイル名を入力するダイアログボックスを表示する。
DIM Excel = CREATEOLEOBJ("Excel.Application")
Excel.Visible = TRUE
Excel.Workbooks.Add()
DIM folderspec = Excel.Application.DefaultFilePath
DIM filename = Excel.ActiveWorkbook.Name
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
path = uniqueFilename(FSO.BuildPath(folderspec , filename + ".xlsx"))
REPEAT
path = Excel.Application.GetSaveAsFilename(FSO.GetFileName(path), "Excel ブック,*.xlsx")
IFB path = FALSE THEN
PRINT "キャンセルされました。"
ELSE
TRY
PRINT Excel.ActiveWorkbook.SaveAs(path)
EXCEPT
CONTINUE
ENDTRY
ENDIF
UNTIL TRUE
//////////////////////////////////////////////////
// 【引数】
// path : ファイルのパス
// 【戻値】
// 重複しないファイル名
//////////////////////////////////////////////////
FUNCTION uniqueFilename(path)
DIM FSO = CREATEOLEOBJ("Scripting.FileSystemObject")
IFB FSO.FileExists(path) THEN
DIM fol = FSO.GetParentFolderName(path)
DIM filename = FSO.GetBaseName(path)
DIM extension = FSO.GetExtensionName(path)
DIM i = 2
WHILE FSO.FileExists(FSO.BuildPath(fol, filename + " (" + i + ")." + extension))
i = i + 1
WEND
RESULT = FSO.BuildPath(fol, filename + " (" + i + ")." + extension)
ELSE
RESULT = path
ENDIF
FEND