【问题标题】:Copy/Paste variable-defined range between sheets在工作表之间复制/粘贴变量定义的范围
【发布时间】:2022-06-14 04:31:13
【问题描述】:

我有两张表,原始数据和用户创建的varSheetName

我将大量数据提取转储到原始数据中,并将列(基于标题字段,我发现没有问题)提取到新工作表。标题所在的列号总是不同的,下面的行数也是如此。
EX:我在 ? 列上找到标题“models/0/availability”,并带有 ??要复制到 varSheetName 的行。

知道复制和粘贴列 # 和最后一行 #,我运行以下代码:

With ThisWorkbook.Sheets(varSheetName)
    .Range(.Cells(intPasteRow, intPasteCol), .Cells(intLastRow, intPasteCol)).Value = Worksheets("Raw Data").Range(.Cells(1, iCopyCol), .Cells(intLastRow, iCopyCol)).Value
End With

我明白了

运行时 1004:应用程序定义或对象定义的错误

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    通过赋值复制范围

    • 这样复制时需要确保两个范围的行数和列数相等:

      intLastRow - IntPasteRow <> intLastRow - 1 ' unless IntPasteRow = 1
      
    • 为了避免那些长而难以理解的行,请使用变量。这就是他们的目的。

    守则

    Option Explicit
    
    Sub CopyData()
        
        ' Workbook
        Dim wb As Workbook: Set wb = ThisWorkbook
        ' Source
        Dim sws As Worksheet: Set sws = wb.Worksheets("Raw Data")
        Dim srg As Range: Set srg = sws.Range(sws.Cells(1, iCopyCol), _
            sws.Cells(intLastRow, iCopyCol))
        ' Destination
        Dim dws As Worksheet: Set dws = wb.Worksheets(varSheetName)
        Dim dfCell As Range: Set dfCell = dws.Cells(intPasteRow, intPasteCol)
        Dim drg As Range: Set drg = dfCell.Resize(srg.Rows.Count)
        ' Copy.
        drg.Value = srg.Value
        
    End Sub
    

    【讨论】:

    • 感谢您的快速回复 - 我看到了这种方法的智慧。但是有一个问题 - Excel 在 sws.Range(.Cells 特别是 .cells 处给我“无效或不合格的参考”。有什么想法吗?
    • 那是因为我最初的答案包含一个 With 语句。解决它。刚刚在点前添加了sws。这些单元格和这个范围都“属于”sws
    • 我会遵守不完全遵循dfCell 的目的,但仍然遇到问题,我将目标代码重新调整如下:Dim dws As Worksheet: Set dws = Worksheets(varSheetName) Dim drg As Range: Set drg = dws.Range(dws.Cells(1, intPasteCol), dws.Cells(intLastRow, intPasteCol)) 这让我越过了终点线 - 我可以现在循环提供目标列和行的范围,我可以根据需要轻松调整和扩展。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-02
    相关资源
    最近更新 更多