|
BOCOTT さん、こんにちわ。・
>便利なイベント関数があったのですね。
>いろいろ仕様を考えた結果
>「名前を付けて保存」をイネーブル表示にして
>「上書き保存」を選択された場合に、今表示しているエクセルの情報を
>CSV形式のファイルにはきだそうと考えています。
>教えて頂いたWorkbookのBeforeSaveイベントは、
>「上書き保存」以外(名前を付けて保存はイネーブル表示なので)
>には、走らないと考えて宜しいのでしょうか?
ブックの保存自体ができないので、『名前を付けて保存』もできません。
前回のCancel=Trueは保存自体をキャンセルしますが、SaveAsUIをTrueにすると、名前を付けて保存ダイアログが表示されます。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Not ThisWorkbook.Worksheets(1).Range("A1").Value = 1 Then
MsgBox "", vbExclamation, "上書保存不許可"
SaveAsUI = True 'Trueにすると名前を付けて保存ダイアログが表示
End If
End Sub
なので、保存関係のコマンドが実行された場合にcsvに吐き出すなら、このプロシージャ−内で処理するようにしたほうがいいですね。
ただし、前回のThisWorkbook.Worksheets(1).Range("A1").Value=1などのように、何かしらの条件をクリアしたときは上書きができるようにしておかないと、せっかく作ったマクロが保存されなかったり、入力したデータが消えてしまったりという心配もあります。
例:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
'左端シートのAA1の値が1の時は通常の保存、それ以外はcsvを作成
If Not ThisWorkbook.Worksheets(1).Range("AA1").Value = 1 Then
ActiveSheet.Copy '現在表示しているシートを複製してcsvに
Ofile = Format(Now(), "yymmddhhmmss") & ".csv" '現在のフォルダにcsv保存
'保存
Application.DisplayAlerts = False
With ActiveWorkbook
.SaveAs Filename:=Ofile, FileFormat:=xlCSV
.Close
End With
Application.DisplayAlerts = True
'終わり
MsgBox CurDir & "\" & Ofile, vbInformation, "csvを作成しました"
Cancel = True '当ブックの保存はキャンセル
End If
End Sub
こんな感じです。
|
|