GetSaveAsFilename

ユーザーからファイル名を取得するために、[名前を付けて保存] ダイアログ ボックスを表示します。ダイアログ ボックスで指定したファイルは、実際には保存されません。保存処理をするにはWorkbook.SaveAs メソッドを使います。

構文
  1. UString = Application.GetSaveAsFilename( InitialFilename, FileFilter, FilterIndex, Title, ButtonText )
引数
InitialFilename省略可
既定値として表示するファイル名を指定します。 この引数を省略すると、作業中のブックの名前が使われます。
FileFilter省略可
ファイルの候補を指定する文字列(ファイルフィルター文字列)を指定します。最大長は255文字です。
FilterIndex省略可
引数FileFilterで指定したファイルフィルター文字列の中で、1から何番目の値を既定値とするかを指定します。この引数を省略するか、ファイルフィルター文字列の数より大きい数値を指定すると、最初のファイルフィルター文字列が既定値となります。
Title省略可
ダイアログボックスのタイトルを指定します。この引数を省略すると既定のタイトルが使用されます。
ButtonText省略可
Macintoshでのみ指定できます。
戻り値
ファイル名に指定したパス。キャンセルした場合はFalseが返る。

Application オブジェクトを返すメソッド・プロパティ

Application.GetSaveAsFilename メソッド
Microsoft Excelアプリケーションを表すExcel.Application オブジェクトを返します。

ダイアログボックスの初期フォルダ

ダイアログボックスの初期フォルダは、以下のプログラムで取得できます。

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
    (5)
解説
  1. 1行目
    DIM Excel = CREATEOLEOBJ("Excel.Application")
    Excelオブジェクトを生成し Excel に代入します。
  2. 2行目
    Excel.Visible = TRUE
    Excelを表示します。
  3. 3行目
    Excel.Workbooks.Add()
    新規ブックを作成します。
  4. 5行目
    DIM path = Excel.Application.GetSaveAsFilename("売上一覧.xlsx", "Excel ブック, *.xlsx, すべてのファイル, *.*")
    [名前を付けて保存]ダイアログボックスを表示し、ファイル名に「売上一覧.xlsx」を既定値として入力。ファイルの種類は「*.xlsx」、「*.*」を選択できるようにし、「*.xlsx」を既定値として選択。
  5. 7-11行目
    IFB path = FALSE THEN
    	PRINT "キャンセルされました"
    ELSE
    	Excel.ActiveWorkbook.SaveAs(path)
    ENDIF
    [キャンセル]が選択された場合、戻り値としてFalseが返るのでそのときは「キャンセルされました」と出力。[保存]が選択された場合、保存先のパスが返るのでSaveAsメソッドで保存処理を行う。

[名前を付けて保存]ダイアログを表示して保存(同名ファイルの競合対策)

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
    (5)