5

ユーザーがブックを開いたときと同じ名前でブックを保存できないようにし、名前を付けて保存オプションを提供したいと考えています。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If ThisWorkbook.Name = "abc" Then
Cancel = True
SaveAsUI = True
End If

また試した

 If ThisWorkbook.Name = "abc" Then SaveAsUI = True

このコードは機能しません。名前を付けて保存ダイアログが表示されません。

次の試行

If ThisWorkbook.Name = "abc" Then ThisWorkbook.ReadOnly = True
'Error - can't assign to read only property.
4

3 に答える 3

5

特定のファイル名のみをテストする場合はabc.xlsm、次のコードで停止しますSave(ただし、パスしますSaveAs)。次に、ReadOnly属性をFalseに設定しSaveて、このセッションでこのファイルで再度使用できないようにします。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Not SaveAsUI Then
    If ThisWorkbook.Name = "abc.xlsm" Then
        Cancel = True
        ThisWorkbook.ChangeFileAccess Mode:=xlReadOnly
    End If
End If
End Sub
于 2012-09-16T10:11:05.793 に答える
3

2 つの提案がありますが、どちらが最適かを知るには、周囲のコードやファイルのオープン/作成方法などについて詳しく教えていただく必要があります。

  1. テンプレートを使用します。コードをテンプレートに配置して新しいワークブックを追加した場合、名前を付けて保存ダイアログなしでは保存できません。

  2. ワークブックを開くときに読み取り専用にします。これは、プロジェクトの設計に応じて、さまざまな方法で実行できます (パラメーターWorkbooks.Openを使用する場合など)。ReadOnly

于 2012-09-16T09:46:35.490 に答える
3

他の答え(読み取り専用またはテンプレート)はどちらも良い提案です

ただし、本当にコーディングしたい場合は、これを試してください

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Dim fName As String
    If ThisWorkbook.Name  "abc.xlsm" Then 
        If Not SaveAsUI Then
            fName = Application.GetSaveAsFilename(, "Excel Macro-Enabled Workbook (*.xlsm), *.xlsm")
            If fName = "False" Then
                MsgBox "File NOT saved", vbOKOnly
                Cancel = True
            Else
                Application.EnableEvents = False
                ThisWorkbook.SaveAs Filename:=fName, FileFormat:=xlOpenXMLWorkbookMacroEnabled
                Application.EnableEvents = True
            End If
        End If
    End If
End Sub

注: Excel 2007/2010 用のコード ( If ThisWorkbook.Name "abc.xlsm" Then)

Excel 2003 を使用している場合は、変更する必要があります。

于 2012-09-16T10:00:58.273 に答える