【问题标题】:Excel Macro to copy rows from one file to anotherExcel宏将行从一个文件复制到另一个文件
【发布时间】:2014-08-22 15:14:42
【问题描述】:

我想将某些列(A、B 和 E)从一个工作簿复制到另一个工作簿。我在 stackoverflow 上很酷的人的帮助下编写了以下宏,但此代码不会复制表格标题,例如“Study Room 2100E - Friday, Nov 30 2012”

Sub CopyColumnToWorkbook()
Dim sourceColumn As Range, targetColumn As Range

Set sourceColumn = Workbooks("Source.xlsm").Worksheets(1).Columns("A:B" & lr)
Set targetColumn = Workbooks("Target.xlsm").Worksheets(1).Columns("A:B")

Set sourceColumn2 = Workbooks("Source.xlsm").Worksheets(1).Columns("E" & lr)
Set targetColumn2 = Workbooks("Target.xlsm").Worksheets(1).Columns("C")

sourceColumn.Copy Destination:=targetColumn
sourceColumn2.Copy Destination:=targetColumn2

End Sub

这是source file

这是我的 current target 文件:(已编辑以包含正确的链接,美国东部标准时间 12 月 11 日下午 6:58)

这是我的desired target 文件:

源文件由许多带有单独表格标题的表格组成。如您所知,正在复制表格的 A、B 和 E 行,但没有复制表格标题。如何修改我的代码,使我当前的目标文件看起来像我想要的目标文件?谢谢

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    您得到结果的原因是标题是合并的单元格,4 个单元格宽,2 列的复制/粘贴没有捕获这些单元格中的值(不知道为什么)。

    解决方法是先复制 Values(通过变体数组),然后复制/粘贴特殊格式。

    这将创建包含 2 个单元格宽的合并单元格的标题。您需要在复制操作后调整标题。

    注意,你应该声明所有你的变量

    Option Explicit ' First line in Module
    
    Sub CopyColumnToWorkbook()
        Dim sourceColumn As Range, targetColumn As Range
        Dim sourceColumn2 As Range, targetColumn2 As Range
        Dim lr As String  ' <-- don't know what this is for, left it in as it's in your OP
        Dim rw As Range
    
        Set sourceColumn = Workbooks("Source.xlsm").Worksheets(1).UsedRange.Columns("A:B" & lr)
        Set targetColumn = Workbooks("Target.xlsm").Worksheets(1).Columns("A:B").Resize(sourceColumn.Rows.Count)
    
        ' Copy values
        targetColumn = sourceColumn.Value
        ' Copy Format
        sourceColumn.Copy
        targetColumn.PasteSpecial xlPasteFormats
    
        Set sourceColumn2 = Workbooks("Source.xlsm").Worksheets(1).Columns("E" & lr)
        Set targetColumn2 = Workbooks("Target.xlsm").Worksheets(1).Columns("C")
        sourceColumn2.Copy Destination:=targetColumn2
    
        ' Adjust Headers
        For Each rw In targetColumn.Rows
            If rw.MergeCells Then
                rw.Resize(1, 4).Merge
                ' Appy cell format to headers here if required
                rw.Font.Size = 18
                ' etc ...
            End If
        Next
    
    End Sub
    

    【讨论】:

    • 非常感谢您的回复。我不敢相信我直到 2014 年才感谢你的好意。我的错。新年快乐!
    【解决方案2】:

    试试这个

    Sub CopyColumnToWorkbook()
    Dim sourceColumn As Range, targetColumn As Range
    
    Set sourceColumn = Workbooks("Source.xlsm").Worksheets(1).Columns("A:G" & lr)
    Set targetColumn = Workbooks("Target.xlsm").Worksheets(1).Columns("A:G")
    
    sourceColumn.Copy Destination:=targetColumn
    
    Workbooks("Target.xlsm").Worksheets(1).Columns("C:D").EntireColumn.Delete
    Workbooks("Target.xlsm").Worksheets(1).Columns("D:E").EntireColumn.Delete
    
    End Sub
    

    【讨论】:

    • 感谢您的回复。对不起,我花了这么长时间才感谢你。干杯!
    猜你喜欢
    • 2021-03-16
    • 2018-03-10
    • 2020-12-15
    • 2019-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-26
    • 2014-10-06
    相关资源
    最近更新 更多