我正在使用Excel VBA复制粘贴。单元格R7具有公式=Max ("C77:AD81")
。
我想要实现的是R7 > F7
,将R7值复制到F7并将Q7更改为=今天。
所有我实现的是R7更改为最大值(" C77:AD81"),其余代码不起作用。我的代码如下。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim rng As Range, r As Range, rv As Long
If Not Intersect(Target, Range("R7")) Is Nothing Then
Set rng = Intersect(Target, Range("R7"))
For Each r In rng
'Change Best Peak Flow and Date Achieved
Select Case r.Value
Case Is > ("F7")
Case Range("R7").Select
Case Range("R7").Copy
Case Range("F7").Select
Case Range("F7").Paste
Case ("R7") = ("F7")
Case Range("Q5").Select
Range("Q5") = Today()
Application.CutCopyMode = False
End Select
Next r
End If
End Sub
答案 0 :(得分:1)
因此,您的rng
对象只有1个单元格,因为您指定了1个目标范围R7
。话虽如此,您的For Each...Next
声明是多余的。
我甚至根本不会使用Select Case
,但是如果您以后想要建立它,我会留下它。
试一试
Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo ErrHandler 'Important to ensure events are reenabled
Application.EnableEvents = False
Dim rng As Range, r As Range, rv As Long
Set rng = Intersect(Target, Range("R7"))
If Not rng Is Nothing Then
'Change Best Peak Flow and Date Achieved
Select Case True
Case r.Value > Range("F7").Value
Range("F7") = Range("R7")
Range("Q5") = Date
End Select
End If
Application.EnableEvents = True
Exit Sub
ErrHandler:
Application.EnableEvents = True
MsgBox Err.Number & vbNewLine & Err.Description
End Sub
答案 1 :(得分:1)
我的建议是不要使用.select。您可以在没有单个.select的情况下编程所有内容。记录和分析宏是学习VBA的非常好的起点,但有时它们太复杂了。我更喜欢简单的解决方案,所以试一试:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("F7") <> Range("R7") Then
Range("F7") = Range("R7")
Range("Q5") = Date
End If
End Sub
答案 2 :(得分:1)
我解决了。
这是我使用的代码。
Private Sub Worksheet_Change(ByVal Target As Range)
'Change Best Peak Flow and Date Achieved
If Range("R7").Value > Range("F7").Value Then
Range("R7").Select
Selection.Copy
Range("F7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("Q5").Select
Selection.Copy
Range("K7").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
End If
End Sub