我的excel文件的正确if条件是什么?

时间:2019-01-14 17:41:41

标签: excel vba

我希望双击特定的单元格,如果该单元格在第一列,并且行大于12,则该单元格将起作用。

iptables

但是我提到的条件似乎不正确。 cuz代码在没有此条件的情况下正常工作。

3 个答案:

答案 0 :(得分:2)

补充@BigBen的答案...

Range.Columns返回一个Range,代表指定范围内的列(此处为Target)。通过检查If Target.Columns = 1,您将对返回的Range对象(即If Target.Columns.[_Defaut] = 1)进行隐式默认成员调用,即产生Target.Columns.Value,它是2D变量数组-可以不能与1文字进行比较。

因此,您得到的错误是类型不匹配错误,因为VBA无法将2D变量数组与整数文字进行比较并成功评估结果。

您想要Range.Column(单数),它返回指定Range中最左侧单元格的列号。

答案 1 :(得分:1)

您要Target.Column,而不是.Columns

从文档中:

  • Range.Column属性:

      

    返回指定范围内第一区域中第一列的编号

  • Range.Columns属性:

      

    返回一个 Range 对象,该对象代表指定范围内的列。

答案 2 :(得分:1)

由于我无法评论@Mathieu的答案(信誉尚不充分),因此您还应该检查是否只选择了一个单元格。在发生双击事件的情况下,此功能可能没有多大用处,但是有时您会将此代码重用于另一种意图(可能是对Worksheet_SelectionChange事件的重用),此时该事件可以由多项选择。在这种情况下,“列”值将返回最左边的列。如果它符合.Column =1条件,则所有选择都将填充日期,如果您丢失表中的数据,日期可能会令人沮丧。

因此,请记住只需将And Target.Count = 1添加到您的If语句中。

PS:强制将VBA IDE强制为explicit variable declaration是一种很好的做法,令我惊讶的是Mathieu并未指出这一点。另外,也不需要使用dateVariable变量。只需使用Target = CalendarForm.GetDate或什至更好:Target.Value = CalendarForm.GetDate