【问题标题】:How to run a loop only once in vba如何在vba中只运行一次循环
【发布时间】:2021-04-27 13:49:24
【问题描述】:

实际上,我正在编写一个代码,如果我在单元格 B1 中输入“Hello”,它将在第 1 列中找到第一个空白单元格并输入“1”。但问题是当我输入“你好”时,第 1 列的所有单元格都被“1”填充。 这是代码:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim ws As Worksheet
Set ws = ActiveSheet

If Range("B1").Value = "Hello" Then

    For Each cell In ws.Columns(1).Cells
        If IsEmpty(cell) = True Then cell.Value = "1": Exit For
    Next cell
    
End If

End Sub

其实我知道我的代码有问题。当我在单元格 B1 中输入 hello 时,循环调用。当循环找到输入时,它会无限执行。但我不能让循环只执行一次。请帮助任何人!

【问题讨论】:

  • 在代码的开头可以 enableEvents 为 false,然后在代码的末尾 enableEvents 为 true。这将停止你的无限循环
  • 我是 vba 新手。你能重写你建议的代码吗?
  • 非常感谢兄弟。解决了!

标签: excel vba foreach


【解决方案1】:

一个单元格工作表更改

  • 这只有在您手动或使用VBA 将“Hello”写入单元格B1 时才有效。
  • 如果您单击单元格B1 并按Enter,尽管值没有更改,但更改仍将被“注册”。如果您想防止这种情况发生,您可以使用公共变量来“跟踪”更改并可能“涉及”Worksheet_Open 事件。
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    If Target.Cells.CountLarge = 1 Then
        If Not Intersect(Range("B1"), Target) Is Nothing Then
            If Target.Value = "Hello" Then
                Dim cell As Range
                For Each cell In Columns(1).Cells
                    If IsEmpty(cell) Then
                        cell.Value = 1
                        Exit For
                    End If
                Next cell
           End If
        End If
    End If

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-02
    • 1970-01-01
    • 1970-01-01
    • 2015-02-05
    • 1970-01-01
    • 2019-06-20
    • 2011-11-02
    • 2013-11-28
    相关资源
    最近更新 更多