Vba 在双击代码之前,根据光标当前所在位置放置数据

Vba 在双击代码之前,根据光标当前所在位置放置数据,vba,excel,insert-update,boolean-expression,database-cursor,Vba,Excel,Insert Update,Boolean Expression,Database Cursor,我可能会也可能不会有一个简单的。。。由于某种原因,我想不出合适的解决办法 电子表格在A列中有数字1到14。14在第15行结束,因为单元格A1中有一个标题。我要做的是双击其中一个数字,然后将该数字转移到同一张纸上的特定单元格(名为“Sheet1”)。我能够把代码放在一起,使它能够将选定的数字传输到特定的单元格。下面的代码运行良好。但是,我不想为不同的单元格添加一堆区域来双击。例如:所选数据的目标单元格是E6、H6和G6。我想把光标从E6开始,双击A2到A15范围内的一个数字,让我在A2和A15之间

我可能会也可能不会有一个简单的。。。由于某种原因,我想不出合适的解决办法

电子表格在A列中有数字1到14。14在第15行结束,因为单元格A1中有一个标题。我要做的是双击其中一个数字,然后将该数字转移到同一张纸上的特定单元格(名为“Sheet1”)。我能够把代码放在一起,使它能够将选定的数字传输到特定的单元格。下面的代码运行良好。但是,我不想为不同的单元格添加一堆区域来双击。例如:所选数据的目标单元格是E6、H6和G6。我想把光标从E6开始,双击A2到A15范围内的一个数字,让我在A2和A15之间选择的数字出现在E6中,因为当我双击A2到A15中的一个单元格时,光标所在的位置。然后我会通过点击H6移动光标,然后返回到A2到A15之间的相同选择,将我选择的任何数字放在H6中,因为这是光标当前存在的位置

希望这是有意义的,甚至是可能的

示例屏幕截图

允许双击将数据放入特定单元格的工作代码

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Intersect(Target, Range("A2:A15")) Is Nothing Then
    Cancel = True
    Target.Copy Destination:=Cells(6, "E")
End If
End Sub

我已经添加了我将尝试的解决方案,并在代码中添加了注释。产生两个工作表变量的原因是,双击中的第一次单击将注册为
SelectionChange
事件。因此,要获得正确的单元格位置,您需要从两个选择返回,而不是仅从一个选择返回

Public selectedCell As String 'Sheet Variable
Public lastCell As String

' This updates the Sheet variable with the most recent selection
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    selectedCell = lastCell
    lastCell = Target.Address
End Sub

' Added a check for having a previously selected cell
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Not Intersect(Target, Range("A2:A15")) Is Nothing Then
        If selectedCell = vbNullString Then
            Cancel = True
            MsgBox "Please select a destination cell for the data."
            selectedCell = vbNullString
            lastCell = vbNullString 'Prevents overwriting same cell by accident
        Else
            Cancel = True
            Target.Copy Destination:=Range(selectedCell)
            selectedCell = vbNullString
            lastCell = vbNullString 'Prevents overwriting same cell by accident
        End If
    End If
End Sub

这里有一个小小的工具,你可以根据自己的需要进行调整。如果双击空单元格,它将成为最终目标。如果双击另一个非空单元格,其内容将复制到FinalDestination:

在工作表代码区域中:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    Cancel = True
    Application.EnableEvents = False
        If Target.Value = "" Then
            Set FinalDestination = Target
        Else
            Target.Copy FinalDestination
        End If
    Application.EnableEvents = True
End Sub
在标准模块中:

Public FinalDestination As Range
注意:


在这个简单的演示代码中,对源/目标没有任何限制。

Awesome!这两个答案都非常有用。非常感谢。然而,有一件事我有点挣扎。我在上面使用的数据作为示例,是我在另一个电子表格上使用的一组数据点,其中包括大量宏和命令按钮。当我在没有宏的单独电子表格上使用上面的示例时,它工作得非常好。当我试图用宏在我的另一个电子表格中实现相同的代码时,代码不起作用,“查看代码”部分冻结。我对vba的有限知识在这里将是显而易见的,但我肯定非常感激。@Dave在工作表或工作簿事件中还有其他宏吗?(特别是,
SelectionChange
或双击之前的
宏是否有
。选择其中的
?(特别是,引用单元格或区域,如
range(“A1”)。选择
?)是否有任何单元格或区域模拟双击工作表上的单元格?是否有任何宏具有
Application.EnableEvents=False
?如果是这样,他们是否也有相应的代码
Application.EnableEvents=True
,在代码结束前它将始终在哪里运行?对于工作表宏,这里有SelectionChange(当我点击屏幕时,使用它将sheet2上的一个按钮居中。基本上,sheet2有大量数据传输到它,每个单元格的数据范围可能很大,一直到AB列。因此,当我进入sheet2时,我可能在T列下,我不想滚动找到按钮,因此按钮将居中到我所在的部分).有一个宏引用.range(“K8”).select.No none模拟双击单元格。No Application.EnableEvents不在其他任何地方使用。@Dave我还假设您不会跨工作表移动数据。如果是,这也可能是问题的一部分。@Dave因为您在
SelectionChange
事件下有其他宏,所以我假设您将现有的g带有我答案中
选择更改
中代码的宏?还有引用
范围(“K8”)的宏。选择
:该代码是否需要
.Select