【问题标题】:How to run loop downward until cells to the right are empty - VBA excel如何向下运行循环直到右侧的单元格为空 - VBA excel
【发布时间】:2018-10-11 12:52:33
【问题描述】:

我正在运行一个循环,输入一个公式,复制它,然后转到下一行,检查右边的 2 个单元格是否为空,如果是,则什么也不做。如果它们包含任何内容,则粘贴 B10 中的公式(以下示例中的单词“true”)。

但是它会粘贴公式,然后停止。它不会一直循环下去,直到右边的单元格为空?

任何关于如何解决此问题的想法将不胜感激!

Sub Macro1()

Range("B10").Select
ActiveCell.Value = "TRUE"
Range("B10").Select
Selection.Copy

Range("B11").Select

Dim cell As Range
For Each cell In ActiveSheet.Range("B11:B150")

If IsEmpty(cell.Offset(0, 3).Value) = True Then
cell.Value = ""

Else: ActiveSheet.Paste

End If

Next cell

End Sub

【问题讨论】:

  • 这不会在任何地方输入公式。你的意思是输入值TRUE?
  • 无论在哪里看到select,基本上都可以删掉那个部分,然后把句号之前的部分放到下一行,合并成一行。 RANGE("B10").Value = "True" 是更好的方法
  • 删除行RANGE("B11").select 你选择它,然后不做任何事情。当我删除那行时,我可以毫无错误地单步执行。
  • urdearboy,是的,我用“true”这个词代替了这个例子的实际公式,因为它太长太复杂,根本没有添加到例子中。
  • 转发 Ed,谢谢!我以为有更短的方法或写它!只是不知道怎么做!知道为什么它不循环吗?

标签: excel vba for-loop


【解决方案1】:

这应该可以...注意你不需要.Select


Sub Test()

Dim ws as Worksheet: Set ws = ThisworkBook.Sheets("Sheet1")

Dim myCell as Range

For Each myCell in ws.Range("B10:B150")
    If myCell.Offset(,1) <> "" and myCell.offset(,2) <> "" Then
        myCell = "TRUE"
    End If
Next myCell

End Sub

【讨论】:

  • 不是 VBA 程序员,但您是否缺少偏移行中逗号前的字符?
  • 已更新。你可以做到 (0, 3) 但0 不是必需的
  • 感谢 Urdearboy,但它停止并突出显示了与我今天早些时候的最后一个问题相同的行。
  • Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets("Client - Order Status Summary") - 我把它改成了正确的工作表名称.....
  • 由于它仍然无法正常工作,我将工作表的名称更改为“Sheet1”,并确保按照您上面的建议进行复制,然后它停止抛出错误 - 但仍然获胜't 在工作表中添加“TRUE”?
猜你喜欢
  • 2015-10-07
  • 2018-10-26
  • 2021-07-16
  • 2016-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多