【问题标题】:Copy and Paste as Value when any cell is clicked within a range of cells在单元格范围内单击任何单元格时复制并粘贴为值
【发布时间】:2019-02-03 16:20:44
【问题描述】:

我有一组 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”,则代码将起作用。有没有办法解决这个问题?

如果有人能告诉我如何解决上述问题,我将不胜感激。提前致谢。

肖恩

【问题讨论】:

  • 定义'不时变化的行号'.
  • 感谢您的评论,但这就是我卡住的地方。如果您能告诉我如何操作,将不胜感激。
  • 行号在什么情况下发生变化?你能用文字解释一下吗?我们看不到你的屏幕,也无法读懂你的想法,所以你必须用你的话。
  • 嗨 teylyn,我很抱歉,感谢 cmets。我已经编辑了我的问题以回应您的 cmets。如果还不清楚,请大声喊叫。

标签: excel vba


【解决方案1】:

这可能对你有用:

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

【讨论】:

  • 嗨蒂姆,非常感谢您的建议和时间。它解决了我的问题。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-09-06
    • 2021-03-18
    • 2017-02-06
    • 2020-08-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多