Excel 如何将sub扩展到多个单元格范围?
此代码的目的是在某个单元格的内容更改时更新单元格中的日期 因为这最初是在子单元中编码的,所以我现在需要将此代码扩展到多个单元的范围。也就是说,此时,代码只获取单元格D4并更新单元格L4,我希望能够向下拖动此函数,使其能够到达多个单元格范围;取D5并更新L5等 以下是我作为子系统的代码:Excel 如何将sub扩展到多个单元格范围?,excel,vba,function,Excel,Vba,Function,此代码的目的是在某个单元格的内容更改时更新单元格中的日期 因为这最初是在子单元中编码的,所以我现在需要将此代码扩展到多个单元的范围。也就是说,此时,代码只获取单元格D4并更新单元格L4,我希望能够向下拖动此函数,使其能够到达多个单元格范围;取D5并更新L5等 以下是我作为子系统的代码: Dim oldValue Public Sub Worksheet_SelectionChange(ByVal Target As Range) oldValue = Target.Worksheet.Rang
Dim oldValue
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
oldValue = Target.Worksheet.Range("D4").Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("D4")) Is Nothing Then
If oldValue <> Target.Worksheet.Range("D4").Value Then
Target.Worksheet.Range("L4").Value = Date
End If
End If
End Sub
Dim oldValue
公共子工作表\u选择更改(ByVal目标作为范围)
oldValue=Target.Worksheet.Range(“D4”).Value
端接头
私有子工作表_更改(ByVal目标作为范围)
如果不相交(Target、Target.Worksheet.Range(“D4”))则为空
如果为oldValue Target.sheet.Range(“D4”).Value,则
Target.Worksheet.Range(“L4”)。值=日期
如果结束
如果结束
端接头
这里的问题是,我不知道如何正确地扩展代码以匹配进一步选择的单元格。以下是我的尝试:
Dim oldValue
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
oldValue = Target.Worksheet.Range("D4", "D21").Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Target.Worksheet.Range("D4", "D21")) Is Nothing Then
If oldValue <> Target.Worksheet.Range("D4", "D21").Value Then
Target.Worksheet.Range("L4", "L21").Value = Date
End If
End If
End Sub
Dim oldValue
公共子工作表\u选择更改(ByVal目标作为范围)
oldValue=Target.Worksheet.Range(“D4”、“D21”).Value
端接头
私有子工作表_更改(ByVal目标作为范围)
如果不相交(Target、Target.sheet.Range(“D4”、“D21”))则为零
如果是oldValue Target.Worksheet.Range(“D4”、“D21”)。值,则
Target.Worksheet.Range(“L4”、“L21”)。值=日期
如果结束
如果结束
端接头
编辑:我写的sub只适用于一个单元格,我正在尝试找到一种方法,将其扩展到特定的单元格选择中。即D4:D12,相应地更新L4:L12中的日期
如果有人能帮助我,我将不胜感激 请尝试以下代码:
Dim oldValue()
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
oldValue = Me.Range("D4:D12").Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("D4:D12")) Is Nothing Then
Application.EnableEvents = False
Dim c As Range
For Each c In Intersect(Target, Me.Range("D4:D12"))
'Check value against what is stored in "oldValue" (row 4 is in position 1, row 5 in position 2, etc)
If oldValue(c.Row - 3, 1) <> c.Value Then
'Update value in column L (8 columns to the right of column D)
c.Offset(0, 8).Value = Date 'or possibly "= Now()" if you need the time of day that the cell was updated
End If
Next
Application.EnableEvents = True
End If
End Sub
Dim oldValue()
公共子工作表\u选择更改(ByVal目标作为范围)
oldValue=Me.范围(“D4:D12”).值
端接头
私有子工作表_更改(ByVal目标作为范围)
如果不相交(Target,Me.Range(“D4:D12”))则为零
Application.EnableEvents=False
调光范围
对于相交中的每个c(目标,Me.Range(“D4:D12”))
'对照“oldValue”中存储的内容检查值(第4行位于位置1,第5行位于位置2,等等)
如果oldValue(c.行-3,1)c.值,则
'更新L列中的值(D列右侧8列)
c、 偏移量(0,8)。Value=Date'或者如果需要更新单元格的时间,则可能“=Now()”
如果结束
下一个
Application.EnableEvents=True
如果结束
端接头
请尝试以下代码:
Dim oldValue()
Public Sub Worksheet_SelectionChange(ByVal Target As Range)
oldValue = Me.Range("D4:D12").Value
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Target, Me.Range("D4:D12")) Is Nothing Then
Application.EnableEvents = False
Dim c As Range
For Each c In Intersect(Target, Me.Range("D4:D12"))
'Check value against what is stored in "oldValue" (row 4 is in position 1, row 5 in position 2, etc)
If oldValue(c.Row - 3, 1) <> c.Value Then
'Update value in column L (8 columns to the right of column D)
c.Offset(0, 8).Value = Date 'or possibly "= Now()" if you need the time of day that the cell was updated
End If
Next
Application.EnableEvents = True
End If
End Sub
Dim oldValue()
公共子工作表\u选择更改(ByVal目标作为范围)
oldValue=Me.范围(“D4:D12”).值
端接头
私有子工作表_更改(ByVal目标作为范围)
如果不相交(Target,Me.Range(“D4:D12”))则为零
Application.EnableEvents=False
调光范围
对于相交中的每个c(目标,Me.Range(“D4:D12”))
'对照“oldValue”中存储的内容检查值(第4行位于位置1,第5行位于位置2,等等)
如果oldValue(c.行-3,1)c.值,则
'更新L列中的值(D列右侧8列)
c、 偏移量(0,8)。Value=Date'或者如果需要更新单元格的时间,则可能“=Now()”
如果结束
下一个
Application.EnableEvents=True
如果结束
端接头
设置隐藏表以保存旧值
在
工作表\u Change
事件处理程序中,您将检查与要监视的范围相交的目标
单元格。如果存在差异,则更新时间戳和隐藏工作表上与更改单元格对应的单元格
Private子工作表\u更改(ByVal目标作为范围)
Application.EnableEvents=False
Application.ScreenUpdating=False
变暗单元格作为范围,拖动单元格作为范围
设置DRange=范围(“D4:D10、D12、D14:D20”)
如果不相交(DRange,Target),则什么都不是
对于Intersect中的每个单元格(DRange、Target)
如果cell.Value工作表(“MirrorValues”).Range(cell.Address),则
cell.EntireRow.Cells(1,“L”).Value=Now
工作表(“镜像值”).Range(cell.Address)=cell.Value
如果结束
下一个
如果结束
Application.EnableEvents=True
Application.ScreenUpdating=False
端接头
设置隐藏表以保存旧值
在
工作表\u Change
事件处理程序中,您将检查与要监视的范围相交的目标
单元格。如果存在差异,则更新时间戳和隐藏工作表上与更改单元格对应的单元格
Private子工作表\u更改(ByVal目标作为范围)
Application.EnableEvents=False
Application.ScreenUpdating=False
变暗单元格作为范围,拖动单元格作为范围
设置DRange=范围(“D4:D10、D12、D14:D20”)
如果不相交(DRange,Target),则什么都不是
对于Intersect中的每个单元格(DRange、Target)
如果cell.Value工作表(“MirrorValues”).Range(cell.Address),则
cell.EntireRow.Cells(1,“L”).Value=Now
工作表(“镜像值”).Range(cell.Address)=cell.Value
如果结束
下一个
如果结束
Application.EnableEvents=True
Application.ScreenUpdating=False
端接头
工作表\u Change
是一个事件处理程序,因此它必须是一个子才能起作用。“我现在需要将此代码扩展到多个单元格范围”的确切含义是什么?除了Comintern的评论外,我认为您真正的问题在于确定原因:“以前,在刷新工作簿时,它更新了日期,现在不更新,并且仅在单元格内的值发生更改时更新”,如果我没有弄错的话。你是:)一个子程序可以很容易地在一个范围o上运行
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
Application.ScreenUpdating = False
Dim cell As Range, DRange As Range
Set DRange = Range("D4:D10,D12,D14:D20")
If Not Intersect(DRange, Target) Is Nothing Then
For Each cell In Intersect(DRange, Target)
If cell.Value <> Worksheets("MirrorValues").Range(cell.Address) Then
cell.EntireRow.Cells(1, "L").Value = Now
Worksheets("MirrorValues").Range(cell.Address) = cell.Value
End If
Next
End If
Application.EnableEvents = True
Application.ScreenUpdating = False
End Sub