【问题标题】:VBA, For , For Each for entire range instead of each rowVBA, For , For Each 整个范围而不是每一行
【发布时间】:2018-09-11 04:46:18
【问题描述】:

我试图在每一行而不是整行中输入一个值。目前,当OK 应用的只有一个单元格应为“失败”时,我的数据在整个范围内都设置为“失败”

OK = primaryDoc.InsertPages(insertPoint, sourceDoc, startPage, endPage - startPage, False)

OK 将返回真或假。

尝试了For 循环

 For row_num = 8 To max_row
        If OK = True Then
            Range("O8:O43").value = "Completed"
        Else
            Range("O8:O43").value = "Failed"
        End If
        Next row_num

尝试了For each 循环

Set a = Range("O3:O43")

For Each cell In a.Rows
    If OK = True Then
        a.value = "Completed"
    Else
        a.value = "Failed"
    End If
Next

当前结果:

预期

谁能帮帮我?

【问题讨论】:

  • 如果不了解OK 是如何声明和赋值的,很难提供帮助。
  • 请看问题。
  • 请编辑您的问题以添加说明。不要在评论中这样做。
  • mkay,那么primaryDoc 是什么类型,它的InsertPages 方法是否返回Boolean 值?什么应该让OK 在循环体内改变它的值?
  • primarydoc 是一个对象。 InsertPages我相信也是一个对象。 OK 返回真或假。

标签: vba excel


【解决方案1】:

在您的第一个代码示例中,您始终将值应用于所有单元格。不要那样做。仅将值应用于当前单元格,即row_num 行中的那个。当然,它还取决于OK 的当前值。你的代码在循环的每次迭代中似乎都没有改变OK的值,所以不清楚它指的是什么。

 For row_num = 8 To max_row
        If OK = True Then
            Range("O" & row_num).value = "Completed"
        Else
            Range("O" & row_num).value = "Failed"
        End If
  Next row_num

【讨论】:

  • 我认为 OK 的价值让我失望。 OK 的值为真或假。
  • @excelguy 是的,这就是Boolean 的值(您甚至可以跳过=True 部分并执行If OK Then) - 问题的关键在于@987654330 的值@ 需要在循环的每次迭代中重新评估。所以无论分配OK 什么都需要在循环中。很可能,您可以完全删除 OK,然后执行 If primaryDoc.InsertPages(insertPoint, sourceDoc, startPage, endPage - startPage, False) Then,假设给 InsertPages 的参数反映了当前的 row_num
  • 我不认为insertpagesOK 反映了当前的row_num。这可能是我的问题。
猜你喜欢
  • 2015-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 2017-02-10
  • 2015-01-02
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多