前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >VBA技巧:记住单元格更改之前的值

VBA技巧:记住单元格更改之前的值

作者头像
fanjy
发布2024-03-26 10:43:51
970
发布2024-03-26 10:43:51
举报
文章被收录于专栏:完美Excel完美Excel

标签:VBA,工作表事件

当工作表单元格中的值被修改后,我需要将修改前的值放置到其右侧单元格中。例如,单元格A1中输入有数值1,当我将其内容修改为2之后,之前的数值1被放置到单元格B2中。可以使用工作表Change事件来实现。

在该工作表代码模块中输入代码:

代码语言:javascript
复制
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim sOldValue As String
 Dim sNewValue As String
 If Target.Address = Range("A1").Address Then
   Application.EnableEvents = False
   sNewValue = Target.Value
   Application.Undo
   sOldValue = Range("A1").Value
   Target.Value = sNewValue
   Worksheets("Sheet1").Range("B1") = sOldValue
   Application.EnableEvents = True
 End If
End Sub

这样,当在单元格A1中重新输入值时,原值会自动放置到单元格B1中。如下图1所示。

图1
图1

当一列单元格区域中的值发生改变时,需要将修改之前的值放置到相邻列对应单元格中,例如对于单元格区域A1:A10,其值发生改变时,原来的值会自动放置到单元格区域B1:B10对应的单元格中。仍然使用工作表Change事件来实现。

在该工作表代码模块中,输入代码:

代码语言:javascript
复制
Private Sub Worksheet_Change(ByVal Target As Range)
 Dim rngToProcess As Range
 Dim sNewValue
 
 Set rngToProcess = Intersect(Target, Range("A1:A10"))
 
 If Not rngToProcess Is Nothing Then
   Application.EnableEvents = False
   sNewValue = Target.Value
   Application.Undo
   Target.Offset(, 1).Value = Target.Value
   Target.Value = sNewValue
   Application.EnableEvents = True
 End If
End Sub

有兴趣的朋友可以试试看。

欢迎在下面留言,完善本文内容,让更多的人学到更完美的知识。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2024-03-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档