【问题标题】:VBA - Change Cell Value based on two other cellsVBA - 根据其他两个单元格更改单元格值
【发布时间】:2016-02-01 19:31:33
【问题描述】:

我需要这个脚本来清空 4 个单元格,并在两个条件都满足时将一个单元格从“完成”更改为“待处理”。

我在 VBA 方面仍然非常缺乏经验,所以对于非常基本和丑陋的代码表示歉意:P

 If Range("C5").Value Like "Done" And Range("D5").Value = "1" Then
     Range("A5:B5").ClearContents
     If Range("C5").Value Like "Done" And Range("D5").Value = "1" Then
         Range("D5:E5").ClearContents

         If Range("C5").Value Like "Done" And Range("D5").Value = "1" Then
             Range("C5").Value = "Pending"

         End If
     End If
 End If

我不明白为什么在这种情况下 C5 单元不会将自身更改为待处理,因为 D5 单元确实会自行清除。

可能是因为我对单元格 C5 使用了数据验证?它获取一个名为 =TaskState

的列表

TaskState 由以下 4 个选项组成: 待办的 进行中 等候接听 完成

非常感谢

【问题讨论】:

  • 为什么你在相同的条件下使用了太多的Ifthen
  • 我认为您应该复习格式的基础知识 [请参阅我对您的问题的编辑以了解 VBA 中的常见格式标准] - 在这种情况下,它会帮助您看到每个 If 语句都依赖于之前的语句它;这将强调您不需要多次运行相同的测试。

标签: vba excel setvalue


【解决方案1】:

试试这个:

 If Range("C5").Value Like "Done" And Range("D5").Value = "1" Then
    Range("A5:B5").ClearContents
    Range("D5:E5").ClearContents
    Range("C5").Value = "Pending"

 End If

问题是,一旦您清除 D 列上的内容,它就不再 = 1,第三个 If 返回 false。所以它永远不会在第三个 if 语句上触发。

如果测试相同的东西,则不需要其他 if 语句。

【讨论】:

  • 你太棒了 :) 再次感谢!也让我更好地理解如何编写代码!最有帮助的。
  • 与主题有点无关。但是假设我必须检查第 5 行到第 35 行的相同内容。有没有一种快速的方法可以做到这一点,而无需额外复制和粘贴整个代码 34 次并将 5 的值更改为最多 35?我必须每隔 5 到 6 次,然后是 7 次,然后是 8 次,等等转移一次。
  • @FrancisMaltais 查看 For 循环。它将允许您将行设为变量,然后您循环相同的代码 35 次。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-26
  • 1970-01-01
  • 2021-10-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多