【问题标题】:Paste from advanced filter从高级过滤器粘贴
【发布时间】:2017-03-21 13:09:50
【问题描述】:

我被困在一条线上,不知道如何解决这个错误。我通过使用高级过滤器过滤不同的名称并将数据复制到单个工作表中来划分列表中的行,但是卡在一行上,即 Next 之前的最后一行:“newWS.Range("A1").Paste ”。我从调试中得到错误 1004:

Private Sub loopfilter()

Dim thisWB As Workbook
Dim filterws As Worksheet
Dim howto As Worksheet
Dim advfilter As Range
Dim Postenws As Worksheet
Dim VersandRange As Range
Dim rng As Range
Dim Name As String

Set thisWB = ThisWorkbook
Set filterws = thisWB.Sheets("Filtro")
Set howto = thisWB.Sheets("How to")
Set advfilter = filterws.Range("A1:AK2")
Set Postenws = thisWB.Sheets("Alle gemahnten Posten (2)")
Set VersandRange = howto.Range("J2", Cells(Rows.Count, "j").End(xlUp))

Dim newWS As Worksheet

    For Each rng In VersandRange
        filterws.Range("AK2") = rng.Value
        Application.CutCopyMode = False
        Postenws.Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
                                                          CriteriaRange:=advfilter, _
                                                          CopyToRange:=filterws.Range("A5"), _
                                                          Unique:=False
        filterws.Range("a5").CurrentRegion.Copy
        Set newWS = thisWB.Sheets.Add
        newWS.Name = rng.Value
        newWS.Range("A1").Paste
    Next

End Sub

知道为什么它不起作用吗?

谢谢

【问题讨论】:

  • 尝试切换顺序 - 添加工作表;命名工作表;从filterws 复制范围,然后立即进行粘贴。

标签: excel vba


【解决方案1】:

试试这个(还参考了您对 Versandrange 的定义)。粘贴不是范围对象的方法。

Private Sub loopfilter()

Dim thisWB As Workbook
Dim filterws As Worksheet
Dim howto As Worksheet
Dim advfilter As Range
Dim Postenws As Worksheet
Dim VersandRange As Range
Dim rng As Range
Dim Name As String

Set thisWB = ThisWorkbook
Set filterws = thisWB.Sheets("Filtro")
Set howto = thisWB.Sheets("How to")
Set advfilter = filterws.Range("A1:AK2")
Set Postenws = thisWB.Sheets("Alle gemahnten Posten (2)")
Set VersandRange = howto.Range("J2", howto.Cells(Rows.Count, "j").End(xlUp))

Dim newWS As Worksheet

For Each rng In VersandRange
    filterws.Range("AK2").value = rng.Value
    Application.CutCopyMode = False
    Postenws.Range("A1").CurrentRegion.AdvancedFilter Action:=xlFilterCopy, _
                                                      CriteriaRange:=advfilter, _
                                                      CopyToRange:=filterws.Range("A5"), _
                                                      Unique:=False
    Set newWS = thisWB.Sheets.Add
    newWS.Name = rng.Value
    filterws.Range("a5").CurrentRegion.Copy newWS.Range("A1")
    filterws.Range("a5").CurrentRegion.clearcontents
Next

End Sub

【讨论】:

  • 感谢 SJR 的提示,您能解释一下您的更改以便我理解吗?复制部分有效,不幸的是过滤器没有:它不会改变 -- filterws.Range("AK2") = rng.Value 中的值
  • 我已将复制和粘贴放在一行中(您无需指定粘贴 - 此语法中隐含)。我所做的唯一其他更改是完全限定 VersandRange。我看不出我所做的任何事情会如何影响您的循环,尽管您可能应该在每次循环迭代后清除 filterws 上的数据。
  • 我已将此行添加到末尾 -- filterws.Range("AK2").Clear 在循环的第一次迭代之后,仅复制 A 列。其余部分与第一个过滤器保持不变。
  • 我指的不是那个范围。我已经修改了上面的代码。单步执行你的代码,看看 rng 在你循环时取什么值。
  • 现在我明白了。完美运行。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-03-06
  • 2016-08-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多