Excel 基于表';s起始细胞
男孩,我很困惑。我只是在一张桌子上把我所有的格式设置得乱七八糟,终于弄明白了原因。这是在表中的DataBodyRange上使用ClearContents的错误还是预期行为 如果我创建一个简单的表,并在工作表\u Change子系统中检查特定列上的更改以应用格式,然后运行Sheet1.ListObjectes(“Table1”).DataBodyRange.ClearContents以清除表的内容(而不是格式),则会触发工作表\u Change子系统(如预期)但是…我希望每个单元格都作为目标传递给工作表,然后根据sub的代码应用任何特定于列的格式 相反,与表的起始列相对应的列似乎被视为Target.column。我想我有点像这样的行为。我不喜欢它,但我明白了。只是它似乎不适用于专门检查和格式化的列(这使得它更令人惊讶,也更难处理) 在下面的代码中,如果一个7列表从第1列开始,当我运行ClearContentsTest时,我得到: 绿色,红色,青色,绿色,绿色,绿色。(工作表_Change get被触发,所有内容都被视为目标。除了第2列和第3列之外,第2列和第3列都被视为目标。我不确定为什么IF语句将第2列和第3列视为目标。第2列和第3列都被视为目标。因为DataBodyRange.ClearContents似乎导致所有内容都被视为第1列,其他所有内容都变为绿色) 现在,移动整个表,使其从第2列开始,我得到红色、青色、红色、红色、红色。所有内容都被视为target.column=2(target.column=3除外,仍然激发并将其格式设置为青色) 移动到第3列,我得到青色,青色,青色,青色,青色,青色,青色,青色 是我遗漏了什么,还是在工作表中对每列进行格式化时,您不能可靠地在工作表上使用DataBodyRange.ClearContents?因为检查列取决于表位置和Excel 基于表';s起始细胞,excel,vba,Excel,Vba,男孩,我很困惑。我只是在一张桌子上把我所有的格式设置得乱七八糟,终于弄明白了原因。这是在表中的DataBodyRange上使用ClearContents的错误还是预期行为 如果我创建一个简单的表,并在工作表\u Change子系统中检查特定列上的更改以应用格式,然后运行Sheet1.ListObjectes(“Table1”).DataBodyRange.ClearContents以清除表的内容(而不是格式),则会触发工作表\u Change子系统(如预期)但是…我希望每个单元格都作为目标传递给
`Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 1 Then
Range(Target.Address).Font.Color = vbGreen
ElseIf Target.Column = 2 Then
Range(Target.Address).Font.Color = vbRed
ElseIf Target.Column = 3 Then
Range(Target.Address).Font.Color = vbCyan
End If
End Sub
Sub ClearContentsTest()
Sheet1.ListObjects("Table2").DataBodyRange.ClearContents
End Sub
ClearContents
是对多单元格范围的单个操作,因此该范围就是传递给Target
的内容。如果只更改一个单元格,则Target
就是一个单元格。由您来管理事件处理程序中的差异。range.Column
是range.Cells(1)Column
FYIRange(Target.Address)
编写Target
(在某些情况下,可能会导致您使用不同于预期的范围)
管理多单元目标范围的示例:
Private子工作表\u更改(ByVal目标作为范围)
变暗rng As范围,c As范围
Set rng=Application.Intersect(目标,Me.Range(“A:C”))
如果不是,那么rng什么都不是
对于rng单元中的每个c
c、 interior.color=数组(vbGreen、vbRed、vbCyan)(c.column-1)
下一个c
如果结束
端接头
非常感谢。这确实有帮助,但我仍然不清楚调用DataBodyRange.ClearContents时传递的目标是什么。在某些方面,似乎每个单元格都是单独处理的(这就是为什么column=2和column=3收到特殊格式的原因)。但在其他方面,似乎该范围内的每个单元格都被视为列=1的一部分(这就是为什么列4、5、6和7被视为列=1时具有vbGreen属性的原因).也许我只是想说得太多,但是当调用ClearContents以获得不同结果时,工作表中的内容会随着目标的改变而改变?当您调用Sheet1.ListObjects(“Table2”).DataBodyRange.ClearContents
传递给目标的范围是Sheet1.ListObjects(“Table2”).DataBodyRange
。如果逐个清除这些单元格,则每个单元格都会依次传递。多单元格区域上的单个操作会传递整个范围作为目标参数。当调用多单元格区域上的行/列时,会得到该区域左上角单元格的行/列。