【问题标题】:Copying dynamic ranges into existing workbook将动态范围复制到现有工作簿中
【发布时间】:2016-03-10 04:58:51
【问题描述】:

VBA 初学者,在工作簿之间复制值时遇到问题。

我的目标是从名为 SupExp 的工作表中复制某些列,并将它们粘贴到具有名为 Expenses 的工作表的不同工作簿中。 SupExp 所需的列是 A:C、H:M 和 O。我需要从第 9 行开始的每一列的值,上面的任何信息都应该忽略。每次这个报告进来时行数都会改变,每次工作表 SupExp 进来时都需要完成这个过程。

当粘贴到费用中时,需要从下一个空行开始粘贴信息。因此,例如,如果费用的 A100 中有信息,则从 SupExp 的 A9 复制的值需要从费用的 A101 开始。

SupExp 的 A:C 列与费用的 A:C 列匹配。 SupExp 的 O 列需要放在费用的 D 列中。 SupExp 的 H:M 列与 E:J 列重合。

感谢您提供有关在哪里学习如何执行此操作的任何帮助或建议。

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    看来您真的是从 VBA 开始的,所以我将提供一些概述信息。

    要做你想做的事,你应该有一个可以作为宏调用的 VBA 子例程(从按钮、键盘快捷键等)。网上有大量教程可以指导您了解 VBA 编程的基础知识,所以我将直接跳到您遇到的具体问题。

    要将单元格或范围的内容复制到其他地方,您只需要一个属性 (=),其中涉及表示范围和所需属性的对象(取决于您是否要复制值、文本、公式等)。以下示例将 Sheet1 上的单元格 A1-A5 的值复制到 Sheet2 上的单元格 B1-B5:

    Sub CopyData()
        WorkSheets("Sheet2").Range("B1:B5").Value = WorkSheets("Sheet1").Range("A1:A5").Value
    End Sub
    

    在您的问题中,您还需要找到列中的第一个空单元格,以找出您将在何处写入数据。一种简单的方法是探测列中每个单元格的内容,检查它是否为空,直到找到一个。此示例对活动工作表的 A 列执行此操作,并将其值设置为字符串,请查看:

    Sub FirstEmpty()
        Dim aRow As Long
        aRow = 1
        While ActiveSheet.Range("A" & aRow).Value <> ""
            aRow = aRow + 1
        Wend
        ActiveSheet.Range("A" & aRow).Value = "FOUND IT!"
    End Sub 
    

    请注意,如果单元格的公式结果为空字符串,则这将被视为空单元格。如果您想避免这种情况,请将While 语句中的.Value 属性替换为.Formula 属性。还有其他(可能更好)方法可以达到相同的结果 - 我只是想提出一个选择。

    尝试组合这些片段并适应您的问题。实验,谷歌周围...如果您仍然无法解决您的问题,请发布您的代码并再次寻求帮助。如果您已经有一些代码并且只需要帮助以使其按预期工作,那么从社区获得帮助会更容易。祝你好运。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-24
      • 1970-01-01
      相关资源
      最近更新 更多