|
mypapa さん、おはようございます。
>下記のような流れでVBAを作成したところ、
>xls形式でダイアログを指定する際に指定のフォルダに
>アクセスしてくれません。記述がおかしいのでしょうか。
アクセスしないの意味がわかりません。
・エラーになる
・保存できない(読み取り専用?)
・フォルダがない
・デフォルトにならない
どんな理由ですか?
>それとエクセル自体を閉じるにはどのようなコードを
>記述したらよいのでしょうか?
Application.Quitです。
カレントフォルダを指定する例。
最後にApplication.Quitしますので、マクロを書いたらそのブックを保存してから実行しないと消えてしまうので注意。
Sub test()
Dim MyFolder As String
Dim MyFileA As String
'
MyFolder = "c:\test"
MyFileA = MyFolder + "\bonaplus" & Format(Date, "yyyymmdd")
'今日実行した場合、c:\testフォルダに、
'bonaplus20030509.csvとbonaplus20030509.xlsができる...でいいのでしょうか?
'フォルダが無い場合は作成(1階層限定の場合はMkDirでいいです)
If Dir(MyFileA, vbDirectory) = "" Then
'2階層以上を指定しても大丈夫なように
ForceDirectories MyFolder
End If
'カレントフォルダ(ダイアログ表示時デフォルトになる)を変更
ChDrive MyFolder: ChDir MyFolder
'
ActiveWorkbook.Worksheets("test").Copy
Application.DisplayAlerts = False
'arg2:=6(csvファイル形式)
Application.Dialogs(xlDialogSaveAs).Show arg1:=MyFileA, arg2:=6
ActiveWorkbook.Close
Application.DisplayAlerts = True
'ダイアログ表示(xls形式)
'AとBは同じフォルダのようなので統合
'
ChDrive MyFolder: ChDir MyFolder
'
ActiveWorkbook.Worksheets("data").Select
ActiveSheet.Range("A1").Select
Application.DisplayAlerts = False
'arg2:=1(xlsファイル形式)
Application.Dialogs(xlDialogSaveAs).Show arg1:=MyFileA, arg2:=1
Application.DisplayAlerts = True
MsgBox "c:\testにファイルが作成されました。"
'
ThisWorkbook.Saved = True
Application.Quit
End Sub
'///子フォルダ連続作成↓
Sub ForceDirectories(ByVal Tpath As String)
'子フォルダを作る C:\a\b\c\d\e というのをdが無い状態でも順次作成
If Right(Tpath, 1) <> "\" Then Tpath = Tpath + "\"
Dim pd(20) As Integer
s1% = 1
Do
md% = InStr(s1%, Tpath, "\")
If md% = 0 Then Exit Do
CC% = CC% + 1: pd(CC%) = md%: s1% = md% + 1
Loop
For NN% = 1 To CC%
Pdat$ = Left(Tpath, pd(NN%))
If Dir(Pdat$, vbDirectory) = "" Then MkDir Pdat$
Next
End Sub
こんな感じです。
アクセスできない理由がわからないので、フォルダを作成しカレントを変更する方向で考えました。
違ってたらすみません。
あと、ファイル名を指定して、フォルダを指定してあるのに、ダイアログを出す理由がわからないのですけど。
それから、ダイアログでキャンセルをクリックすると、保存されずに終わるのですが、その部分の分岐がついていないので正常終了(2つとも保存)できたように見えますよ。
|
|