【问题标题】:Paste values in a filtered table in excel VBA将值粘贴到excel VBA中的过滤表中
【发布时间】: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。是的,它们必须与每个目标行对齐。

标签: excel vba


【解决方案1】:

你可以使用这样的东西:

Sub copia()
    Dim hotel As String
    Dim rSource As Range
    Dim rTarget As Range
    Dim cellTarget As Range
    Dim i As Long
    
    hotel = ActiveSheet.Name
    Set rSource = Sheets(hotel).Range("d43:d50")
    Set rTarget = Sheets("discounts").ListObjects("discount").DataBodyRange
    
    i = 1
    For Each cellTarget In rTarget.Parent.Range(rTarget.Columns(4).Address)
      If cellTarget.Offset(, -3) = hotel Then cellTarget = rSource(i)
      i = i + 1
    Next
    
End Sub

【讨论】:

  • 仅供参考 rTarget.Parent.Range(rTarget.Columns(4).Address)rTarget.Columns(4) 相同
  • @TimWilliams - 我也这么认为,但在测试时我被证明是错误的......
  • 感谢 cmets。还是不行:(
  • 在我的测试用例中它有效。如果它不适合您,您将需要分享更多详细信息,例如数据的屏幕截图以及您认为有用的所有其他内容。
  • “酒店”表的名称是什么?
猜你喜欢
  • 1970-01-01
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 2011-11-21
  • 2015-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多