excel - 单元格值变化时自动触发宏|Excel|VBA|
问题描述
表 1 作为输入值
表 2 作为我的价值和数据
工作表值从 Sheet1 值引用使用=Sheet1!E4
我想避免 onclick 按钮事件 => 一旦工作表 1 中的值更改为 10,然后工作表 2 中的值更改为 10 => 然后获取工作表 2 中更改的值,宏应自动检测发生的值更改那么数据的打印应该在 I 列中发生多次
模块 1我的宏 :
Sub mac()
Dim ws As Worksheet
Dim rDest As Range
Dim lCount As Long
Dim sValue As String
Set ws = ActiveWorkbook.ActiveSheet
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
表 2:代码
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Range("E4"), Range(Target.Address)) Is Nothing Then
Call mac
End Sub
输出:应该像下面这样 输出图像:https ://i.stack.imgur.com/voz7g.png
解决方案
一些事情
您的
Worksheet_Change
程序应该是Sheet1
代码而不是Sheet2
- 至少从您表达问题的方式来看。还要明确你的
Worksheet
声明(例如Sheets("Sheet1")
),而不是使用类似的东西ActiveSheet
- 在你的
Intersect
, 符号Range(Target.Address)
是完全多余的,因为Target
已经是一个Range
对象。
您的代码Sheet1
应该是:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Intersect(Sheets("Sheet1").Range("E4"), Target) Is Nothing Then
Call mac
End If
End Sub
并且在Module
Private Sub mac()
Dim ws As Worksheet
Dim rDest As Range
Dim lCount As Long
Dim sValue As String
Set ws = ThisWorkbook.Sheets("Sheet2") ' note the explicit declaration
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
作为个人说明,在我看来,我会提防使用“单行
If
语法”,这是一种糟糕的编程习惯,会导致意外错误和更差的代码可读性。作为一个很好的例子说明为什么,检查这个问题/答案
推荐阅读
- r - 从依赖于其他变量中的 NA 的变量中删除单个值
- javascript - 使用循环的 Firestore 批量写入
- python-3.x - Python2和Python3之间的字符编码
- python - 如何使用python为用户删除keycloak领域角色
- javascript - 如何获取兄弟输入字段值?
- javascript - 使用脚本标签时使用 ejs
- r - 如何通过 shinydasboard 中的 downloadButton() 从 Dropbox 下载 .csv 文件?
- ios - 如何让图片每次点击出现在不同的地方,而不是被复制
- loops - 如何访问飞镖循环之外的变量?
- swift - swift 5中选项之间的编辑器导航栏