我有一个表的条件公式,该表需要用户填写所需的单元格,问题是一旦该单元格突出显示,我将无法保存,因为某些VBA阻止了该单元格的保存
我有一些VBA可动态添加行,并正在检查是否有一种方法可以合并条件公式和该行的任何数据验证,从而迫使用户单击带有所有公式的“添加行”按钮和数据验证。
我尝试在包含逻辑的列中的每个单元格中包含一个示例行,但是用户从不更改第一行,这不是真实数据。
''下面的代码将一个表行添加到表中。
Sub AddTableRow()
Application.ScreenUpdating = False
Application.EnableEvents = False
Range("Table2[Line Number]").Select
Selection.ListObject.ListRows.Add AlwaysInsert:=True
Range("E14").Select
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
''下面的代码正在寻找橙色/红色的任何单元格,并阻止Excel中的Workbook_BeforeSave事件。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim rng As Range
For Each rng In Worksheets(1).UsedRange
If rng.DisplayFormat.Interior.Color = 49407 Or rng.DisplayFormat.Interior.Color = vbRed Then
MsgBox ("Please correct any fields in red/orange")
Cancel = True
Application.ScreenUpdating = True
Exit Sub
End If
Next rng
End Sub
因此,总而言之,我想使用所有条件格式设置和数据验证将行添加到表中,而无需使用VBA获得“现有”行。
答案 0 :(得分:0)
我不确定我是否已完全解决问题,但是一种方法可能是修改您的BeforeSave代码以忽略任何完全为空的表行:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim rng As Range, rw As range, c as Range, clr as Long
Set rng = me.listobjects("Table2").DatabodyRange
For each rw in rng.Rows
'any content in this row ?
If application.counta(rw) > 0 Then
'check for validation errors
For Each c in rw.cells
clr = c.DisplayFormat.Interior.Color
If clr = 49407 Or clr = vbRed Then
MsgBox ("Please correct any fields in red/orange")
Cancel = True
Exit Sub
End If
Next c
End If
Next rw
End Sub
...或者让它忽略“样本”第一行中的任何内容。