用于将数据粘贴到新表行中的 VBA 宏 - Excel

Posted

技术标签:

【中文标题】用于将数据粘贴到新表行中的 VBA 宏 - Excel【英文标题】:VBA Macro for Pasting Data In New Row of Table - Excel 【发布时间】:2021-09-05 08:50:42 【问题描述】:

我记录了一个宏,它试图从表格外部的单元格中复制信息,并将它们粘贴到同一张表的新行中。尝试运行宏时,我收到“运行时错误 '1004':Range 类的 PasteSpecial 方法失败。”问题似乎在于第一行说明:

Selection.PasteSpecial 粘贴:=xlPasteValues,操作:=xlNone,SkipBlanks _ :=假,转置:=假

我在这个模块中有一组粘贴特殊代码,所以我担心第一行可能不是唯一的问题。以下是我到目前为止的代码。

Sub PlaceOrder()
'
' PlaceOrder Macro
'

'
    Range("A3").Select
    Selection.Copy
    Range("Table1[[#Headers],[Balance]]").Select
    Selection.End(xlDown).Select
    Selection.ListObject.ListRows.Add AlwaysInsert:=False
    ActiveCell.Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveCell.Offset(0, 1).Range("A1").Select
    Range("B3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("B23").Select
    Selection.PasteSpecial Paste:=xlPasteFormulas, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    ActiveCell.Offset(0, 1).Range("A1").Select
    Range("C3:E3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("C23").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveCell.Offset(0, 3).Range("A1").Select
    Range("F3").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("F23").Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    ActiveCell.Offset(0, 3).Range("A1").Select
    Range("E3").Select
    Application.CutCopyMode = False
    Selection.ClearContents
    Range("D3").Select
    Selection.ClearContents
    Range("C3").Select
    Selection.ClearContents
    Range("B3").Select
    Selection.ClearContents
    Selection.ConvertToLinkedDataType ServiceID:=268435456, LanguageCulture:= _
        "en-US"
End Sub

任何帮助将不胜感激!

编辑: Worksheet

附件是我正在使用的工作表的屏幕截图。我希望能够将 A3 和 C3-F3 的值以及 B3 中的公式粘贴到下表中。在粘贴所有这些信息之前,需要插入一个新行。

【问题讨论】:

您能分享一下初始工作表和生成的(所需)工作表的屏幕截图吗? 感谢您回复我的问题。我添加了我的工作表的屏幕截图,并为我想要完成的工作提供了更多背景信息。 【参考方案1】:

这应该可行。它基本上只是您代码的更清晰版本。

Sub PlaceOrder()

Dim tbl As ListObject
Dim LastRow As Long
Set tbl = ActiveSheet.ListObjects("Table1")
LastRow = tbl.Range.Rows.Count    'get # of last row

With ActiveSheet
    'copy and paste A3
    .Range("A3").Copy
    tbl.Range(LastRow, 1).Offset(1, 0).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    
    'copy and paste B3
    .Range("B3").Copy
    tbl.Range(LastRow, 2).Offset(1, 0).PasteSpecial Paste:=xlPasteFormulas
    
    'copy and paste C3:F3
    .Range("C3:F3").Copy
    tbl.Range(LastRow, 3).Offset(1, 0).PasteSpecial Paste:=xlPasteValuesAndNumberFormats
    
    'clear value in B3:F3
    .Range("B3:F3").ClearContents
    
End With

End Sub

您的原始宏不起作用,因为系统在此行之后忘记了复制的值: Selection.ListObject.ListRows.Add AlwaysInsert:=False

【讨论】:

太棒了。这完美地工作了 Aster Hu。谢谢。 @isinkzat 因为你是新来的,please see this 完美,Aster Hu。谢谢你。现在我的电子表格遇到了另一个问题。我有两个简单的 WorkSheet_Calculate subs 写成几张纸。当另一个工作表上的单元格 >= 某个百分比时,表格 A 到 F 列中最后一行的内容将被清除。所以现在我遇到了问题,您提供的成功代码被粘贴到刚刚清除内容的行下方的新行中。有没有办法修改您提供的代码,以便可以将信息复制并粘贴到由于我的其他代码的结果而留空的行中? @isinkzat 如果我做对了,您想在添加新行后重新触发其他工作表中的 Worksheet_Calculate 事件,对吗?如果是这样,请在最后添加Application.CalculateFull,这将强制计算您的其他电子表格

以上是关于用于将数据粘贴到新表行中的 VBA 宏 - Excel的主要内容,如果未能解决你的问题,请参考以下文章

VBA宏在Excel中格式化1个包含文本行的单元格,并将这些行添加到单独的行中

Excel VBA宏根据日期选择数据并将其移动到新选项卡

Excel VBA - 循环未正确添加数据

Excel / VBA:粘贴数据后自动调整列宽

按月过滤的 VBA 宏,仅将当月的数据粘贴到不同的工作表上

我想把几个excl表格当中的数据统一到一张新表中,请问有啥简单方法呢?