如果值小于旧值| excel | VBA |

时间:2019-05-26 11:32:46

标签: excel vba

我有一个Excel

第1张

Sheet1

第2页

Sheet2

工作表1的值=> F5 =>'50'=>在工作表2中被引用=> E4 =>'50'

当我在工作表1中输入值代替F5时=>值在工作表2中发生更改=> E4 =>自动

使用下面的代码将数据打印多次 我的代码

模块:mac

Dim ws As Worksheet
Dim rDest As Range
Dim lCount As Long
Dim sValue As String

Set ws = ThisWorkbook.Sheets("Sheet2")
Set rDest = ws.Range("I2")

With ws.Range(rDest, ws.Cells(ws.Rows.Count, rDest.Column).End(xlUp))
    If .Row >= rDest.Row Then .ClearContents
End With

lCount = Val(ws.Range("E4").Value)
sValue = ws.Range("E8").Value

If lCount > 0 Then rDest.Resize(lCount) = sValue

End Sub

第1张代码:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Sheets("Sheet1").Range("F5"), Target) Is Nothing Then
       Call mac
    End If
End Sub

这是输出

赞一下下面的输出:

https://paste.pics/494c856d2908a83ca031ee20bb706a09

我的上述代码根据上述输出可完美工作 但是随着其中的一些缺陷

假设

条件1:

如果输入的值为'50'=>,则“ I”和“ J”列中的数据将被打印50次=>正确[Perfect]

条件2:

如果输入的值为'60'=>,那么库伦“ I”和“ J”中的数据将追加 之前的数据为“ 50” => 50 + 10 => 60 =>这是正确的[完美]

条件3:

假定“ I:J”列已作为DATA =>到范围'60' 如果输入的值小于“ 60”(如“ 30”),则更新仅应在“ I:J”列中进行30次,但应打印数据,但没有任何反应 如果范围小于旧值,则会发生附加操作,但不会清除数据

应该有类似的机制

如果Count为50 =>打印=> I,J

如果Count大于50 =>附加I,J

如果Count小于50 =>清除I,J列,然后=>填充I,J列

我如何实现此机制?

1 个答案:

答案 0 :(得分:0)

据我所知您的代码可以正常工作...  我明白您的要求。查看注释,了解对您的代码所做的仅两项更改:

Sub mac()
Dim ws As Worksheet
Dim rDest As Range
Dim lCount As Long
Dim sValue As String

Set ws = ThisWorkbook.Sheets("Sheet2")
Set rDest = ws.Range("I2")

With ws.Range(rDest, ws.Cells(ws.Rows.Count, rDest.Column + 1).End(xlUp)) 'Add another column to your selection here
    If .Row >= rDest.Row Then .ClearContents
End With

lCount = Val(ws.Range("E4").Value)
sValue = ws.Range("E8").Value

If lCount > 0 Then rDest.Resize(lCount, 2) = sValue 'Resize to 2 columns instead of the default 1.

End Sub

PS:如果我误解了您的查询,请告诉我。