首页 > 解决方案 > 将值从工作表传递到模块

问题描述

我的工作表中有这个:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim D_KeyCells As Range

    Set D_KeyCells = Range("D6:D16")

  If Not Application.Intersect(KeyCells, Range(Target.Address)) _
           Is Nothing Then

        Call D_CheckRow()


  End If
End Sub

但我只需要在选择并更改 D 列时运行此操作。

因为我需要根据更改的单元格列进行多次检查。

所以如果细胞

D6 被更改然后调用 D_CheckRow

E6 被改变然后调用 E_CheckRow

F6 改变然后调用 F_CheckRow

G6 被改变然后调用 G_CheckRow

等等。。

我确信有一种更简单的方法来编写代码,因此非常感谢任何帮助。

更新:目标是检查一旦填充了单元格,它就会运行子模块

以下是我正在检查的范围:

Set D_KeyCells = Range("D6:D16")
Set E_KeyCells = Range("E6:E16")
Set G_KeyCells = Range("G6:G16")
Set I_KeyCells = Range("I6:I16")
Set J_KeyCells = Range("J6:J16")
Set K_KeyCells = Range("K6:K16")
Set L_KeyCells = Range("L6:L16")
Set M_KeyCells = Range("M6:M16")

因此,如果 D 单元格发生更改,则运行 D_CheckRow,如果它是 E 单元格,则运行 E_CheckRow,等等。

标签: excelvba

解决方案


您可以使用Application.Run,如:

Private Sub Worksheet_Change(ByVal Target As Range)

Dim D_KeyCells As Range

Set D_KeyCells = Range("D6:G6")

If Not Application.Intersect(D_KeyCells, Target) Is Nothing Then
   Application.Run (Split(Target.Address, "$")(1) & "_CheckRow")
End If

End Sub

或者根据 Mathieu 的评论使用参数方法,如果我没有进入这个特定的兔子洞,我不得不说这是我倾向于采用的方法。


推荐阅读