【发布时间】:2020-12-22 04:39:06
【问题描述】:
我正在尝试将特定工作表中的值粘贴到我在不同工作表中的表格中。
我必须按工作表名称过滤表格,然后将我之前复制的值粘贴到“D”列中。
问题在于它将值粘贴在第一行中,而在列“D”的第一个过滤行中粘贴值
这是我正在使用的代码:
Sub copia()
Application.ScreenUpdating = False
Dim hotel As String
hotel = ActiveSheet.Name
Sheets("discounts").Select
ActiveSheet.ListObjects("discount").Range.AutoFilter Field:=1, Criteria1:=hotel
Sheets(hotel).Select
Range("d43:d50").Select
Selection.Copy
Sheets("discounts").Select
ActiveSheet.ListObjects("discount").ListColumns(4).Range.Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Sheets(hotel).Select
Range("L33").Select
Application.CutCopyMode = False
End Sub
【问题讨论】:
-
不清楚你想要什么。您的代码首先对表进行过滤,然后在一个 COLUMN(不是 ROW)中选择并复制一些值,然后您返回并选择另一列(包括未过滤的值),最后粘贴。您是否有意复制 ant paste 列?您过滤行,所以也许您需要复制和粘贴行?.. 请更准确地描述您想要做什么。
-
你好@ZygD。谢谢你的评论。我所做的是按工作表名称在表格中过滤,过滤器在第 1 列中。然后我回到原始工作表并选择一些必须粘贴在表格第 4 列中的值。这些值必须粘贴在已过滤的列中,但每次我运行代码时,它们都会粘贴在第一行,即未过滤。
-
这看起来像是一种风险转移值的方式 - 复制的值是否需要与每个目标行对齐?
-
事先过滤表的事实没有任何作用。之后,当您选择第 4 列时,它会选择所有第 4 列(甚至过滤掉的行)。这就是为什么您从第一个表的数据行开始粘贴值的原因。这不是一种安全的方法,因为您有时可能不知道将过滤多少行,而您的“d43:d50”(8 行)始终保持不变。我相信你也会想让“d43:d50”动态化。想想看。如果在粘贴 8 行时只过滤 2 行会怎样?如果在粘贴 8 时过滤 20 行会怎样。
-
感谢 cmets @TimWilliams。是的,它们必须与每个目标行对齐。