我想创建一个指标列(称为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
答案 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