【问题标题】:Copy to other worksheets depending on criteria根据条件复制到其他工作表
【发布时间】:2018-04-04 11:08:11
【问题描述】:

我是 VBA 的新手并且被卡住了。我在这里看过一些 Youtube 视频和一些主题,但这对我来说很复杂 - 我希望你们中的一些人能帮助我:)

我使用下面的宏并遇到了这些障碍。

  1. 当我运行它时,它会将第一行留空,当我插入新数据并运行它时,它再次按照我的意愿将所有内容完美地向下移动,但它不会填充空单元格 - 它只是从第 17 行开始,因为在工作表 Opgørsel 我有 17 行填充了数据 - 我不知道,为什么它会那样跳跃。

  2. 在工作表 opgørsel 中,我在单元格 D3 中有 12 个选项,根据选择的选项,我希望它复制到该工作表 - 我也制作了 12 个工作表 - 但我没有知道如何做到这一点。

.

Sub Copypastemeddata()
    Worksheets("Opgørsel").Activate
    Range("A1").CurrentRegion.Copy
    Worksheets("Opsamling").Activate
    Range("A1").PasteSpecial
    Range("A1").PasteSpecial xlPasteValues
    Range("A1").PasteSpecial xlPasteColumnWidths
    Selection.Insert Shift:=xlDownenter
End Sub

【问题讨论】:

  • 请说明您希望看到的情况和实际发生的情况。
  • 1.当我运行宏时,我希望它将插入的数据复制到该工作表中,具体取决于单元格“D3”中选择的内容 - 我有 12 个选项和 12 个工作表,它需要复制到。 2. 现在,当我说运行宏时,它只是复制到带有 17 个空行的“Opsamling”表 - 我有 17 行填充了数据 - 我不想让它跳 17 行,我想从顶部开始只需向下移动,当我再次运行宏时 - 也有新数据出现时。我希望这更清楚。
  • 您可能需要显示更多代码,因为我看不到 Opsamling 或 D3 引用。
  • 这就是我拥有的所有代码,我已经制作了其他所有东西 manuelle - 但我无法更进一步,因为我需要 vba 的帮助。
  • 我的 D3 选项是:"1.a";"2.b";3.c" 等等。

标签: vba excel criteria copy-paste


【解决方案1】:

以下是使用 D3 将目标复制到另一张纸的情况。我希望随着您提供更多细节,这将不得不进一步完善。这假设 D3 持有一个有效的工作表名称以复制到。它不断地从源表中获取所有内容,因此您最终会得到重复的数据。如果您只想传输新行,则需要在某处(可能在另一张表中)跟踪行数。

Option Explicit

Sub Copypastemeddata()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim sourceCell As Range
    Dim targetSheet As Worksheet

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Opgørsel")

    Set sourceCell = ws.Range("D3")  'Cell with sheet names for copying to

    With ws

          Set targetSheet = wb.Worksheets(sourceCell.Text)

          Dim nextRow As Long
          nextRow = GetLastRow(targetSheet, 1)
          nextRow = IIf(nextRow = 1, 1, nextRow + 1)

         .Range("A1").CurrentRegion.Copy targetSheet.Range("A" & nextRow)

    End With

End Sub


Public Function GetLastRow(ByVal ws As Worksheet, Optional ByVal columnNumber As Long = 1) As Long

    With ws

      GetLastRow = .Cells(.Rows.Count, columnNumber).End(xlUp).Row

    End With

End Function

例子:

【讨论】:

  • 非常感谢,它看起来很复杂 - 我只是试图复制它并让它运行,但它不会?它说“运行时错误 9 - 订阅超出范围”。
  • 我不希望这能解决您的问题。我认为需要更多信息。它确实向您展示了如何使用单元格中的值来确定要复制粘贴到哪个工作表以及如何查找下一行。
  • 刚刚试了一下,效果很好——非常感谢!如果我在 5 个月内工作,我不会这样做!我应该在哪里放置这两个 "Range("A1").PasteSpecial xlPasteValues Range("A1").PasteSpecial xlPasteColumnWidths" ?
  • 你可以简单地做 targetSheet.Columns.AutoFit
  • 你简直就是我的英雄——非常感谢! - 我有两个最后的问题。 1.我希望数据总是向下而不是在第一个副本下?我应该改变什么? 2. 我已经保护了所有内容,但是当我运行代码时它无法复制,因为它受到保护 - 我能做些什么来改变它?非常感谢您,先生!你帮了我很大的忙。
猜你喜欢
  • 2018-06-05
  • 1970-01-01
  • 2022-11-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多