【问题标题】:Paste into next empty column in different sheet粘贴到不同工作表中的下一个空列
【发布时间】:2021-05-06 17:05:07
【问题描述】:

我的代码旨在从多个工作表中复制相同的范围,并将每个工作表中的数据粘贴到组合工作表中的下一个空列中。我的代码从每张纸正确复制,但粘贴到同一列并覆盖前面的粘贴。

谁能指出我的错误?

非常感谢!

Sub CopyToNextCol()

    Dim Sh As Worksheet
    Dim NextCol As Long

    For Each Sh In ThisWorkbook.Worksheets

        If Sh.Name <> "Master" And Sh.Name <> "Lists" And Sh.Name <> "Combined" Then

          NextCol = Sheets("Combined").Cells(, Columns.Count).End(xlToLeft).Column + 1

          Sh.Range("B2:B44").Copy Sheets("Combined").Cells(, NextCol)

        End If

    Next Sh

End Sub

【问题讨论】:

  • 每张纸上是否填充了单元格“B2”?另外,在行上明确表示可能很好:Cells(, Columns.Count) ----> Cells(1, Columns.Count)
  • 谢谢@BigBen - 就是这样!如果我包含 B1(列标题),它就可以工作。我现在的问题是我打算在复制的数据中使用不同的列标题!
  • @cdfj 您不需要标题,您在“单元格(”之后缺少数字“1”,因此它应该适用于具有任何标题的任何工作表。1 代表您想知道的行最后一个要使用的单元格。

标签: excel vba


【解决方案1】:

从多个工作表复制相同的范围

  • 以下示例将复制第一行及其下方每个范围中的工作表名称(“我计划在 cmets 中使用不同的列标题”)。
  • s - 来源,d - 目的地。

快速修复

Option Explicit

Sub CopyToNextCol()

    Dim wb As Workbook: Set wb = ThisWorkbook ' workbook containing this code
    
    Dim dws As Worksheet: Set dws = wb.Worksheets("Combined")
    Dim dCell As Range
    Set dCell = dws.Cells(1, dws.Columns.Count).End(xlToLeft).Offset(, 1)
    
    Dim sws As Worksheet
    Dim srg As Range
    
    For Each sws In wb.Worksheets
        Select Case sws.Name
        Case "Master", "Lists", "Combined"
            ' Skip (do nothing)
        Case Else
            Set srg = sws.Range("B2:B44")
            dCell.Value = sws.Name
            srg.Copy dCell.Offset(1)
            Set dCell = dCell.Offset(, 1)
        End Select
    Next sws

    'wb.Save

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 2021-02-10
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多