3

私は現在、データマイニングを行い、最終的にワークブックを保存するマクロを持っています。ワークブックの保存機能を無効にして、ワークブックを保存する必要があるたびにユーザーにマクロの使用を強制するつもりです。これは私がこれまでに持っているものですが、うまくいかないようです。これを行うと、以下に説明するマクロとこのサブルーチンが両方ともループで実行されます。私のマクロがワークブックを保存しようとするたびに、このサブはそれを許可していません。私は基本的に、ユーザーにマクロを使用してブックを保存するように強制したいと考えています。

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

    NoSave = MsgBox("Changes have to be submitted before the workbook can be saved, Proceed and submit ?", vbYesNo, "Continue?")

    If NoSave = vbNo Then
        Cancel = True
    Else
        Main
    End If
End Sub
4

2 に答える 2

2

これが例です。これを に貼り付けThisWorkbookます。これにより、Saveまたはを使用できなくなりますSaveAs。ただし、マクロSaveThisFileを使用してブックを保存することはできます。必要に応じて修正してください。

Option Explicit

Dim SaveByCode As Boolean
Const msg As String = "Please use the macro to save the file"

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    If Me.Saved = False And SaveByCode = False Then
        MsgBox msg, vbExclamation, "Unable to save"
        Cancel = True
    End If
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Application.EnableEvents = False
    If SaveByCode = True Then
        SaveThisFile
    Else
        MsgBox msg, vbExclamation, "Unable to save"
        Cancel = True
    End If
    Application.EnableEvents = True
End Sub

'~~> Your macro to save the file
Sub SaveThisFile()
    SaveByCode = True
    ThisWorkbook.Save
End Sub

Dim SaveByCode As Boolean: 保存マクロがモジュール内にある場合は、これを削除してモジュール内にThisWorkbook配置Public SaveByCode As Booleanします。

于 2012-07-24T12:47:57.340 に答える
0

代わりに、これはどうですか (最初は質問を誤解していましたが、興味深いので試してみたかったのです):
thisworkbook モジュールで public boolean (exceptional) を宣言します。

Option Explicit
Public bSave As Boolean

イベント BeforeSave イベントでは:

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

Dim sNoSave As String

If bSave = True Then
    bSave = False
    Exit Sub
End If

sNoSave = MsgBox("Changes have to be submitted before the workbook can be saved, Proceed and submit ?", vbYesNo, "Continue?")

If sNoSave = vbNo Then
    bSave = False
    Cancel = True
    Exit Sub
Else
    bSave = True
    Call Main(bSave)
End If

End Sub

主に:

オプション明示

Sub Main(bSave)

If bSave = True Then
    ThisWorkbook.SaveAs Filename:="U:\Book1.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
    MsgBox "Main method called"
End If

End Sub
于 2012-07-24T13:54:37.383 に答える