2011-02-02 3 views
1

ユーザーが「保存」または「名前を付けて保存」をクリックしたときにブックの名前をセルの名前に変更する必要があります。私の推測では、Workbook_BeforeSaveイベントでこれを行う必要があります。"Workbook_BeforeSave"イベントのブック "FullName"プロパティを変更する

  • あなたがSaveSaveAs、またはSaveCopyAsを呼び出すアウトとActiveWorkbook.FullNameプロパティを設定するにはどうすればよい:私は、以下の質問がありますか?
  • ツールバーを無効にしてカスタム保存ボタンを追加しなくても、私ができることは何ですか?

私は、ファイル名を作成するには、保存オペレーションを除く名やフルネームのプロパティを変更することはできません

Dim fName As String, sName As String 
fName = ThisWorkbook.FullName 
sName = ThisWorkbook.Name  
fName = Left(fName, (Len(fName) - Len(sName))) & _ 
     Thisworkbook.Worksheet("Cust").Range("FILE").Value & ".xls" 

おかげ

答えて

1

を取得するには、次のコードを使用します。 Before_SaveイベントにはCancel引数があります。これをTrueに設定すると、保存操作が停止し、自分で操作できます。ここに例があります。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) 

    Dim sOldName As String 

    'If SaveAsUI Then 
     Cancel = True 'cancel the save and do it yourself in code 
     sOldName = Me.FullName 'store the old name so you can delete it later 

     'Save using the value in the cell 
     Application.EnableEvents = False 
      Me.SaveAs Me.Path & Application.PathSeparator & _ 
       Me.Worksheets("CUST").Range("FILE").Value & ".xls" 
     Application.EnableEvents = True 

     'If the name changed, delete the old file 
     If Me.FullName <> sOldName Then 
      On Error Resume Next 
       Kill sOldName 
      On Error GoTo 0 
     End If 

    'End If 

End Sub 
+0

ありがとうございました。私はそれが "SaveAs"をクリックするときにのみ動作することがわかります。ちょうど "保存"のためにこれを行う方法はありますか?また、それはブラウザを表示しない、それを表示する方法はありますか?最後に、より簡単なファイル命名コードに感謝します。 -theo –

+0

私はそれを台無しにしました。 If SaveAsUI Thenとそれに対応するEnd Ifを削除し、Saveでも動作します。 –

+0

ありがとうございます。私はそれを試み、すべてのセーブをキャンセルした。私はworkbook_beforesaveが以前に呼び出されたかどうかを確認するためにグローバルブール値を調べるIfステートメントの後ろにキャンセルを置くことで回避することができました。再帰が大好き! –

関連する問題