Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 基于表';s起始细胞_Excel_Vba - Fatal编程技术网

Excel 基于表';s起始细胞

Excel 基于表';s起始细胞,excel,vba,Excel,Vba,男孩,我很困惑。我只是在一张桌子上把我所有的格式设置得乱七八糟,终于弄明白了原因。这是在表中的DataBodyRange上使用ClearContents的错误还是预期行为 如果我创建一个简单的表,并在工作表\u Change子系统中检查特定列上的更改以应用格式,然后运行Sheet1.ListObjectes(“Table1”).DataBodyRange.ClearContents以清除表的内容(而不是格式),则会触发工作表\u Change子系统(如预期)但是…我希望每个单元格都作为目标传递给

男孩,我很困惑。我只是在一张桌子上把我所有的格式设置得乱七八糟,终于弄明白了原因。这是在表中的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?因为检查列取决于表位置和

`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

FYI
Range(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
。如果逐个清除这些单元格,则每个单元格都会依次传递。多单元格区域上的单个操作会传递整个范围作为目标参数。当调用多单元格区域上的行/列时,会得到该区域左上角单元格的行/列。