创建一个指标列以操作相应行

时间:2015-09-04 15:36:17

标签: excel excel-vba vba

我想创建一个指标列(称为A列),我将用它来处理VBA中其他列(E,F,Q,R)中的复制和粘贴,ClearContents等几个函数。 / p>

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

此请求的目的是使我的代码更具动态性,它非常静态,如下例所示。

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

1 个答案:

答案 0 :(得分:3)

这假设您需要'操作'将指标输入A列时会发生。

对于这个例子,' 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

<强>更新

使用命令按钮处理批处理模式中的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