VBA根据单元格验证来检查值

时间:2018-08-16 12:00:47

标签: excel vba

我有一个带有复杂级联验证的Excel表单。这意味着A1条目仅限于特定的下拉列表。对于A2,A3等也是如此。在A1中选择的选项确定了可用于A2的选项,在A3下的选项由A2(也许还有A3)的选择来限制。

该表单可用于手动输入,但是我想使用一个简单的宏(A2.Value = ...)自动执行一些用户输入,但是当我这样做时,输入的值将覆盖验证。

是否有一种方法可以针对单元格中可能的验证列表评估值?验证规则很复杂,我不愿意在VBA中重新创建它们。我还发现,可以验证是否已经在单元格中输入的值与其验证相对应,但是同样,由于验证规则的复杂性,这也不理想(例如,如果在某个阶段某个值与验证不对应) ,我需要完全停止宏,而不要继续执行。)

附录:

好,例如:

A1验证是一个简单的列表:“ A,B”

A2验证是由公式定义的,指向命名范围的列表:

=IFS(A1="A",INDIRECT(NamesStartingByA),A1="B",INDIRECT(NamesStartingByB))

这意味着,如果在A1中选择“ A”,在A2中选择“ Andrea,Alena,Anna ...”;如果我选择“ B”,则A2将提供“鲍勃,鲍里斯,芭芭拉...”

这很好地适用于手动输入,即在A1中选择“ A”可防止用户将值“ Bob”放入A2。

但是我正在编写一个宏,允许用户从自己的电子表格中批量输入值

wsTarget.Cells(1,1) = wsSource.Cells(1,1)
wsTarget.Cells(2,1) = wsSource.Cells(1,2)

但是,如果用户在其源工作表“ A”和“ Bob”中放入代码,则代码将覆盖验证。这对我来说不是意外的行为,但是我想知道是否有一种方法可以在放入wsTarget.Cells(2,1)之前,先检查wsSource.Cells(1,2)是否对应于确定的下拉列表。值。

1 个答案:

答案 0 :(得分:0)

对于这种情况,我总是喜欢使用UserForm。有两个原因:

  1. 它更加人性化。
  2. “保护”和编写所需选项的脚本更加容易。

例如,我制作的UserForm由几门课程组成,如果完全检查,将为后续课程打开各种学习资料(因此查看的内容也取决于先前的答案)。