Excel VBA 保存前检查过滤器
Excel VBA check for Filters before Save
我有一个共享的工作簿。当多个用户正在处理它并且一个人使用过滤器保存时,它会出现问题。
我正在尝试编写工作簿代码以防止在有过滤器时保存。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Worksheets("sheet1").AutoFilterMode = True Then
MsgBox "Filters not allowed, remove filters ", vbExclamation, "Warning!"
Cancel = True
Exit Sub
End If
End Sub
如果可能的话,我想检查完整的工作簿,但会满足于每个 sheet。当我 运行 这个时,宏就保存了。我已将它放在 Microsoft Excel 对象 > ThisWorkbook 部分。
除了AutoFilterMode
还有FilterMode
,我会在保存之前将它们都设置为False
循环中的每个sheet应该可以解决问题。
您给定的代码会查看名为 "sheet1" 的 sheet 是否启用了过滤器。请注意 "Sheet1"(第一个 sheet 的默认名称)与 "sheet1".
不同
您可以使用循环查看工作簿中的每个 sheet 并测试是否有过滤器:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim wsht As Worksheet
For Each wsht In ThisWorkbook.Worksheets
If wsht.AutoFilterMode = True Then
MsgBox "Filters not allowed, remove filters before saving", vbExclamation, "Warning!"
Cancel = True
Exit Sub
End If
Next wsht
End Sub
一种对用户更友好的方法是在保存之前使用此宏删除所有筛选器,同时还提示用户保存工作簿将删除筛选器并询问他们是否希望继续。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim wsht As Worksheet
For Each wsht In ThisWorkbook.Worksheets
If wsht.AutoFilterMode = True Then
MsgboxAnswer = MsgBox("Filters are currently active, saving this workbook will remove them. Do you want to continue?", vbYesNo)
If MsgboxAnswer = vbYes Then RemoveFilters = True
Exit For
End If
Next wsht
If RemoveFilters Then
For Each wsht In ThisWorkbook.Worksheets
wsht.AutoFilterMode = False
Next wsht
End If
End Sub
将此代码放在 ThisWorkbook 模块上,这将在保存工作簿之前清除应用于所有工作表的所有过滤器。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim ws As Worksheet
For Each ws In Worksheets
If ws.FilterMode Then ws.ShowAllData
Next ws
End Sub
我有一个共享的工作簿。当多个用户正在处理它并且一个人使用过滤器保存时,它会出现问题。 我正在尝试编写工作簿代码以防止在有过滤器时保存。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
If Worksheets("sheet1").AutoFilterMode = True Then
MsgBox "Filters not allowed, remove filters ", vbExclamation, "Warning!"
Cancel = True
Exit Sub
End If
End Sub
如果可能的话,我想检查完整的工作簿,但会满足于每个 sheet。当我 运行 这个时,宏就保存了。我已将它放在 Microsoft Excel 对象 > ThisWorkbook 部分。
除了AutoFilterMode
还有FilterMode
,我会在保存之前将它们都设置为False
循环中的每个sheet应该可以解决问题。
您给定的代码会查看名为 "sheet1" 的 sheet 是否启用了过滤器。请注意 "Sheet1"(第一个 sheet 的默认名称)与 "sheet1".
不同您可以使用循环查看工作簿中的每个 sheet 并测试是否有过滤器:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim wsht As Worksheet
For Each wsht In ThisWorkbook.Worksheets
If wsht.AutoFilterMode = True Then
MsgBox "Filters not allowed, remove filters before saving", vbExclamation, "Warning!"
Cancel = True
Exit Sub
End If
Next wsht
End Sub
一种对用户更友好的方法是在保存之前使用此宏删除所有筛选器,同时还提示用户保存工作簿将删除筛选器并询问他们是否希望继续。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim wsht As Worksheet
For Each wsht In ThisWorkbook.Worksheets
If wsht.AutoFilterMode = True Then
MsgboxAnswer = MsgBox("Filters are currently active, saving this workbook will remove them. Do you want to continue?", vbYesNo)
If MsgboxAnswer = vbYes Then RemoveFilters = True
Exit For
End If
Next wsht
If RemoveFilters Then
For Each wsht In ThisWorkbook.Worksheets
wsht.AutoFilterMode = False
Next wsht
End If
End Sub
将此代码放在 ThisWorkbook 模块上,这将在保存工作簿之前清除应用于所有工作表的所有过滤器。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim ws As Worksheet
For Each ws In Worksheets
If ws.FilterMode Then ws.ShowAllData
Next ws
End Sub