创build一个指示器列来在相应的行中执行其他function

我想创build一个指示器列(称为列A),用于在VBA中的其他列(E,F,Q,R)中执行复制和粘贴,ClearContents等几个function。

理论上,我会在列A中放置一个“x”或“1”,这个列将会被我的代码读取,然后执行其他命令。 所以,如果在列A的第14行有一个x,那么我的代码会从(Q,14)复制/粘贴到(E,14)。

这个请求的目的是使我的代码更加dynamic,它是非常静态的,比如下面的例子。

Private Sub CommandButton1_Click() Range("A9").Select Do Until IsEmpty(ActiveCell) Range("E9:E10").Value = Range("I9:I10").Value ActiveCell.Offset(1, 0).Select Loop End Sub 

这假设你想要在A列中input指标时发生“行动”

对于这个例子,“1”是复制的指示符,“2”是ClearContents的指示符。

将此过程放在工作表的代码模块中:

 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Cells.Count = 1 Then Application.EnableEvents = False CustomActions Application.EnableEvents = True End If End Sub 

把这个过程放在一个标准的代码模块中:

 Public Sub CustomActions(Target As Range) Dim n& Const INDICATOR_COL = 1 If Target.Column <> INDICATOR_COL Then Exit Sub n = Target.Row Select Case Target.Value Case 1 'copy Q to E Range("e" & n) = Range("q" & n) Case 2 'clear Q and R Range("q" & n, "r" & n).ClearContents End Select End Sub 

UPDATE

若要使用命令button处理批处理模式下的列A指示器,请不要使用我的原始答案中的Worksheet_Change()过程。

而是使用这个事件过程:

 Private Sub CommandButton1_Click() Dim i&, n&, v n = [index(a:a,1+max(iferror(match({"*";9E+99},a:a,{-1;1}),1)))].Row v = [a1].Resize(n) For i = 1 To n If Len(v(i, 1)) Then CustomActions Range("a" & i) End If Next End Sub