Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 单击单元格可将字符串添加到列表底部_Excel_Vba_Copy Paste - Fatal编程技术网

Excel 单击单元格可将字符串添加到列表底部

Excel 单击单元格可将字符串添加到列表底部,excel,vba,copy-paste,Excel,Vba,Copy Paste,我对在Excel中使用宏非常陌生,所以我希望这个问题不要太傻 我正在创建一个工作表来跟踪销售情况。我在一列中有一个饮料列表,我想给单元格指定一个宏,这样当你点击它们时,单元格中的文本就会复制到另一列 我知道您可以录制宏来复制和粘贴值,但我不确定如何使它复制列中下一个空单元格中的文本,而不仅仅是第一个单元格中的文本 总之,这些是我的表格。我希望能够单击饮料列中的一个单元格,并将该字符串显示在列表列的底部(因此在'Cuba Libre'之后) 谢谢 编辑\u 1: 好的,这是我到目前为止的代码:

我对在Excel中使用宏非常陌生,所以我希望这个问题不要太傻

我正在创建一个工作表来跟踪销售情况。我在一列中有一个饮料列表,我想给单元格指定一个宏,这样当你点击它们时,单元格中的文本就会复制到另一列

我知道您可以录制宏来复制和粘贴值,但我不确定如何使它复制列中下一个空单元格中的文本,而不仅仅是第一个单元格中的文本

总之,这些是我的表格。我希望能够单击饮料列中的一个单元格,并将该字符串显示在列表列的底部(因此在'Cuba Libre'之后)

谢谢

编辑\u 1:

好的,这是我到目前为止的代码:

Option Explicit
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
   If Target.Address = "$C$2" Then
       Range("C2").Select
       Selection.Copy
       Range("A2").Select
       ActiveSheet.Paste
   End If
End Sub
^我已经为C列(C2:C5)中的每个相关单元格重复了这个代码


正如我所说,我只能够将饮料列中的值复制粘贴到列表列中,我不知道如何将值粘贴到下一个空单元格中。

您需要扩展对
目标的检查,以包括整个饮料范围。然后确定列表中的下一个可用单元格

类似(硬编码为A列中的列表和C列中的饮料)

更新 因此,我设法找到了如何让宏将单元格值粘贴到列表底部的方法

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Dim LastRow As String

   If Target.Address = "$C$2" Then
       Range("C2").Select
       Selection.Copy
       LastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row + 1
       Range("A" & LastRow).Activate
       ActiveSheet.Paste
       Application.CutCopyMode = False
   End If
End Sub
然而,我有一个关于生活质量的问题。有没有办法编辑代码,使其适用于C2:C10范围内的所有单元格?因为现在,我必须为每个单元格重复代码,为范围内的所有单元格替换第3行和第4行

If Target.Address = "$C$2" Then
       Range("C2").Select

如果您实际将列表和饮料转换为表(使用这些名称),则可以使用以下代码

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim i As Integer
    Dim row As Integer
    
    ' Check user has clicked on a drink
    If Not Intersect(Target, [Drinks]) Is Nothing And Target.Cells.Count = 1 Then
        ' Find first blank row in List
        For i = [List].Rows.Count To 1 Step -1
            If [List].Cells(i, 1) = "" Then
                row = i
            End If
        Next
        
        ' If no blank row, add a new row
        If row = 0 Then
            ListObjects("List").ListRows.Add
            row = [List].Rows.Count
        End If
        
        [List].Cells(row, 1) = Target
    End If
End Sub

请注意,SO不是免费的代码编写服务。如果您自己尝试过,请分享您遇到的困难。不要让别人在没有表现出任何努力的情况下为你写下整件事。对了,对不起,我的不好。我想我知道如何让单元格可以点击,就像我说的,我知道如何让它复制粘贴,我正在努力让它复制粘贴在列表的底部。根据我收集的信息,我需要创建一个循环来测试单元格是否为空,如果为空,则让它向下移动一行,但这就是我丢失的地方。到目前为止,我将尝试编辑我的问题。非常感谢!我使用了另一个方向的解决方案,但我将使用你的解决方案,因为它工作得非常好。只要检查一下,以防我移动列,
Me.Cells(2,3),Me.Cells(Me.Rows.Count,3)
获取饮料引用,因此
2,3
引用行、列,而
Me.Rows.Count,3
是对列的另一个引用,对的然后,
Me.Cells(Me.Rows.Count,1)
中的1是对列表列的引用。@Anze您的分析是正确的。如果这些列可能会四处移动,而您事先不知道它们在哪里,则需要某种方法来定位它们。一些想法:命名范围,或表格(ListObjects),或搜索第(1)行中的标题,或其他
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Dim i As Integer
    Dim row As Integer
    
    ' Check user has clicked on a drink
    If Not Intersect(Target, [Drinks]) Is Nothing And Target.Cells.Count = 1 Then
        ' Find first blank row in List
        For i = [List].Rows.Count To 1 Step -1
            If [List].Cells(i, 1) = "" Then
                row = i
            End If
        Next
        
        ' If no blank row, add a new row
        If row = 0 Then
            ListObjects("List").ListRows.Add
            row = [List].Rows.Count
        End If
        
        [List].Cells(row, 1) = Target
    End If
End Sub