1

我为此搜索了高低,但无法让它在我的整个范围内工作。这是我的第一篇文章,所以要温柔。

我有一个算法可以分析某些产品应该从一个生产阶段转移到下一个生产阶段的时间。然后,它提供完成下一阶段生产所需的资源量。

我的问题是,当资源超过可用资源时,我希望出现一个弹出框并警告用户;这应该发生在范围内的所有单元格上。我已经让它成功工作,但只有当单元格“S7”超过该值时。任何帮助将不胜感激。

代码如下:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myRng As Range

    Set myRng = ThisWorkbook.Sheets("SMT 2").Range("S7:S26")

    For Each mycell In myRng

        If mycell.Value >= 16 Then sVar = _
        MsgBox("Will Enough Pre-Wave Resources be Available?", 4, "Attention!")

        If sVar = 7 Then
            Application.Undo
        End If

        Exit For
    Next
End Sub
4

2 回答 2

2

你不需要循环。您可以使用Intersect来检查范围内的任何单元格Range("A7:A26")是否已更改。另请注意,以下代码不适合用户粘贴>16该范围内的值的情况。

这是你正在尝试的吗?

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myRng As Range
    Dim lRow As Long

    If Target.CountLarge > 1 Then Exit Sub

    On Error GoTo Whoa

    Set myRng = Range("A7:A26")

    Application.EnableEvents = False

    If Not Intersect(Target, myRng) Is Nothing Then
        lRow = Target.Row

        If Range("S" & lRow).Value >= 16 Then sVar = _
        MsgBox("Will Enough Pre-Wave Resources be Available?", 4, "Attention!")

        If sVar = 7 Then Application.Undo
    End If

Letscontinue:
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume Letscontinue
End Sub
于 2013-10-16T17:31:20.810 回答
1

您想通过所有单元还是只通过 S7 到 S26?

如果你想通过 S7:S26,这是代码:(Exit For 是在错误的地方)

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim myRng As Range
    Set myRng = ThisWorkbook.Sheets("SMT 2").Range("S7:S26")

    For Each mycell In myRng
        If mycell.Value >= 16 Then 
            sVar = MsgBox("Will Enough Pre-Wave Resources be Available?", 4, "Attention!")
            If sVar = 7 Then
                Application.Undo
                Exit For
            End If
        End if
    Next
End Sub
于 2013-10-16T17:30:37.840 回答