在单元格区域中单击任何单元格时,将其复制并粘贴为值

时间:2019-02-03 06:33:42

标签: excel vba

我有一组VBA代码,它们复制Sheet2中的单元格“ AC14”并将其值粘贴到Sheet6中的单元格“ Q4”。我有另一组代码可以在Sheet6中更改单元格“ Q4”的值时在Sheet6中应用过滤器,对此我感到很高兴。这些代码虽然不完善,但在一定程度上可以奏效。下面是我复制和粘贴部分的代码。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Range("AC14"), Target) Is Nothing Then
Range("AC14").Select
Selection.Copy
Sheet6.Activate
Sheet6.Range("Q4").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
End If

结束子

我想改进的是以下内容:

1)将Range(“ AC14”)更改为列“ AC”中从第11行开始的动态范围内的动态单元格,该行编号会不时变化。这样,当我(或用户)单击此范围内的任何单元格时,代码将正确运行。

注意:Sheet2是一个工作表,用于记录对我正在处理的项目所做的更改。每行代表我的项目的一个更改,随着时间的流逝,更改(行)的数量可能达到1500。Sheet2的第1至10行分配给列标签

2)当我的光标位于Sheet2的“ AC14”单元格上时,再次单击它不会带我进入Sheet6。我了解这是因为它不是工作表中的更改(在vba中,因为cursur已经存在)。但是,如果我单击其他单元格,然后再次单击单元格“ AC14”,则代码将起作用。有办法解决吗?

如果有人可以向我阐明如何解决上述问题,我将不胜感激。预先感谢。

塞恩

2 个答案:

答案 0 :(得分:0)

关于项目2:看来您确实需要定义需求。当前,您正在使用Worksheet_SelectionChange事件。就其本质而言,当使用鼠标或键盘更改选择时,代码将运行。如果用鼠标再次单击已选择的单元格,则该代码将不会运行。因为那不会改变选择。

您可能还希望使用其他事件,但是单击已选择的单元格都无法使它们起作用,因此,从您的问题的最真实的意义上讲:不,没有解决方法

答案 1 :(得分:0)

这可能对您有用:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    If Target.Cells.CountLarge > 1 Then Exit Sub

    If Target.Row >= 14 And Target.Column = 29 and Target.Value <> "" Then

        Sheet6.Range("Q4").Value = Target.Value
        Target.Offset(0, -1).Select  'select the cell to the left
        Sheet6.Activate

    End If

End Sub