【问题标题】:Paste Data to a Table Using Excel Macro Code使用 Excel 宏代码将数据粘贴到表中
【发布时间】:2018-04-25 19:13:10
【问题描述】:

我正在尝试将一系列数据从一个工作簿复制并粘贴到另一个已转置的工作簿。假设我已经使用 Excel 宏代码将数据复制到剪贴板...如何最好确保将数据粘贴到另一个工作簿中,在特定工作表上,并且必须在新的表中的新行中可能还需要创建行(表需要向下扩展一行)?我看了又看都无济于事,我发现了一个与我要解决的问题非常相似的问题。我到目前为止的代码如下,但它只粘贴到相同的位置,并没有考虑表中已经存在的数据。

Sub Devs_ImportData_2()
'
' Devs_ImportData_and_CreateTable_1 Macro
'
'

    Windows("DevVariables.txt").Activate
    Range("D3:D543").Select
    Application.CutCopyMode = False
    Selection.Copy
    Windows("B_1_2 DevConfiguration.xlsm").Activate
    Range("B2").Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
        False, Transpose:=True

    Range("A1").Select
    ActiveCell.FormulaR1C1 = "Devs"
    Range("A2").Select
    ActiveCell.FormulaR1C1 = "D1"
    Range("A1:TV2").Select


    Columns("A:TV").EntireColumn.AutoFit


    Windows("DevVariables.txt").Activate
    ActiveWindow.Close

End Sub

【问题讨论】:

    标签: excel vba


    【解决方案1】:

    我不会使用剪贴板来实现这一点。您可以遍历工作簿 A 中的所有选定单元格,并将内容插入工作簿 B 中的单元格中。然后您可以确定每个单元格的操作。

    否则,请像这样使用您的粘贴:

    Selection.Insert Shift:=xlDown
    

    编辑:

    我创建了一个示例来演示将选定范围转置到另一个工作簿中,其中选定的数据将插入到目标工作簿的选定行中。此示例使用数组而不是剪贴板。

    Sub insertrange()
    Dim sourceSheet As Excel.Worksheet
    Dim targetSheet As Excel.Worksheet
    Dim arr() As Variant
    Dim i, j As Long
    
    Set sourceSheet = Application.Workbooks(2).Sheets(1)
    Set targetSheet = Application.Workbooks(1).Sheets(1)
    
    sourceSheet.Activate
    
    ReDim arr(Selection.Rows.Count - 1, Selection.Columns.Count - 1)
    
    For i = 0 To Selection.Rows.Count - 1
        For j = 0 To Selection.Columns.Count - 1
            arr(i, j) = Selection.Cells(i + 1, j + 1).Value
        Next
    Next
    
    targetSheet.Activate
    
    Dim selectedCell As Excel.Range
    Set selectedCell = Selection
    
    Dim rowOffset As Long
    rowOffset = selectedCell.row
    
    For i = 0 To UBound(arr, 1)
    
        targetSheet.Rows(rowOffset + i).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
    
        For j = 0 To UBound(arr, 2)
            targetSheet.Cells(i + rowOffset, j + 1).Value = arr(i, j)
        Next
    Next
    
    End Sub
    

    以下是我如何准备表格的屏幕截图,以及运行上述代码后的结果。需要进行一些添加和更改,例如列偏移量和行偏移量,仅复制值可能还不够。您可能需要公式或更复杂的东西,但基础知识就在那里。

    source book

    target book

    result

    【讨论】:

    • 我同意并且我知道我应该避免使用剪贴板来解决这个问题的目标,但是我很无能并且仍在学习 Visual Basic。您愿意进一步扩展您提供的答案吗?
    猜你喜欢
    • 2017-11-20
    • 2021-09-05
    • 2010-11-08
    • 1970-01-01
    • 2022-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多