【问题标题】:Copying Content from one sheet to another based on a master reference list VBA根据主参考列表VBA将内容从一张纸复制到另一张纸
【发布时间】:2017-01-12 16:22:38
【问题描述】:

我正在尝试格式化报告并将重要值复制到一张空白纸上。

我正在使用参考主列表来决定哪些信息重要或不重要。每个项目的唯一引用存储在 B 列中名为“主列表”的工作表中,我希望我的宏扫描此列表并查看它是否可以在“原始数据”工作表中找到匹配项并将匹配的行复制到“报告”表。

我所做的尝试可以很好地完成所有初始格式设置,但是当它遇到第一个 While 命令时会绊倒。我已经尝试了几种不同的方法来做到这一点,但我似乎无法让它发挥作用。用莱娅公主的话来说,帮助我 Stack Overflow 你是我唯一的希望

Dim RD As Worksheet, Report As Worksheet, Masterlist As Worksheet
Dim LSearchRow As Integer
Dim LCopytoRow As Integer
Dim rngFound As Range
Dim SearchItem As String


Set RD = Sheets("Raw Data")
Set Report = Sheets("Report")
Set Masterlist = Sheets("Master List")


LCopytoRow = 1
LSearchRow = 1

RD.Select
    Columns("A:A").Select
    Selection.Delete Shift:=xlToLeft

    Columns("B:D").Select
    Selection.Delete Shift:=xlToLeft

    Columns("D:Q").Select
    Selection.Delete Shift:=xlToLeft

    Columns("E:I").Select
    Selection.Delete Shift:=xlToLeft

    Columns("C:C").Select
    Selection.ClearContents


While Len(Range("A" * CStr(LSearchRow)).Value) > 0
    SearchItem = Masterlist.Range("B" & k).End(xlUp).Row
    If Range("A" & CStr(LSearchRow)).Value = Masterlist.Range("B" & CStr(LSearchRow)).Value Then
        Rows(CStr(LSearchRow) & ":" & CStr(LSearchRow)).Select
        Selection.Cut

        Report.Select
        Rows(CStr(LCopytoRow) & ":" & CStr(LCopytoRow)).Select
        ActiveSheet.Paste

        LCopytoRow = LCopytoRow + 1

        RD.Select
    End If

    LSearchRow = LSearchRow + 1

Wend

提前致谢!

【问题讨论】:

  • 这是因为您从未定义 k 所以它在 MasterList.Range("B" & k) 中查找 k = 0 并且因为单元格 B0 不存在您会收到错误。
  • 啊,我最初定义了它,但改变了它的结构方式!我现在将更改它,看看是否有帮助!谢谢!
  • 但是您的SearchItem 没有任何意义,因为(如果您将k 替换为Masterlist.Rows.Count,您将始终得到相同的Searchitem,但这并不甚至不重要,因为您再也不会引用 SearchItem.... 只需删除该行,因为它从未使用或引用过?
  • 啊,是的,也是第一个问题的副产品。随着整条线的消失,我没有收到任何错误,但没有任何内容复制到新工作表中。我最初想在宏循环上使用 Searchitem 以从列表中查找项目并在原始数据中搜索它,并在找到时复制

标签: vba excel reference copy


【解决方案1】:

没有样本数据很难测试,但这样的东西应该适合你:

Sub tgr()

    Dim wb As Workbook
    Dim wsMstr As Worksheet
    Dim wsData As Worksheet
    Dim wsRprt As Worksheet
    Dim aMasterFilter As Variant

    Set wb = ActiveWorkbook
    Set wsMstr = wb.Sheets("Master List")
    Set wsData = wb.Sheets("Raw Data")
    Set wsRprt = wb.Sheets("Report")

    wsData.Range("A:A,C:E,H:U,W:AA").EntireColumn.Delete xlToLeft
    wsData.Columns("C").EntireColumn.ClearContents
    wsData.AutoFilterMode = False

    aMasterFilter = Application.Transpose(wsMstr.Range("B1", wsMstr.Cells(wsMstr.Rows.Count, "B").End(xlUp)).Value)
    With wsData.Range("A1", wsData.Cells(wsData.Rows.Count, "A").End(xlUp))
        .AutoFilter 1, aMasterFilter, xlFilterValues
        .EntireRow.Copy wsRprt.Range("A1")
        .EntireRow.Delete xlShiftUp
        .Parent.AutoFilterMode = False
    End With

End Sub

【讨论】:

  • 完美!非常感谢!我在这方面花费的时间比我想承认的要长得多,我陷入了一些逻辑循环
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多