Vba 在双击代码之前,根据光标当前所在位置放置数据
我可能会也可能不会有一个简单的。。。由于某种原因,我想不出合适的解决办法 电子表格在A列中有数字1到14。14在第15行结束,因为单元格A1中有一个标题。我要做的是双击其中一个数字,然后将该数字转移到同一张纸上的特定单元格(名为“Sheet1”)。我能够把代码放在一起,使它能够将选定的数字传输到特定的单元格。下面的代码运行良好。但是,我不想为不同的单元格添加一堆区域来双击。例如:所选数据的目标单元格是E6、H6和G6。我想把光标从E6开始,双击A2到A15范围内的一个数字,让我在A2和A15之间选择的数字出现在E6中,因为当我双击A2到A15中的一个单元格时,光标所在的位置。然后我会通过点击H6移动光标,然后返回到A2到A15之间的相同选择,将我选择的任何数字放在H6中,因为这是光标当前存在的位置 希望这是有意义的,甚至是可能的 示例屏幕截图 允许双击将数据放入特定单元格的工作代码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之间
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
?