【问题标题】:Excel VBA to copy 1st row of data of one sheet and paste to another sheetExcel VBA复制一张纸的第一行数据并粘贴到另一张纸上
【发布时间】:2020-12-10 03:54:36
【问题描述】:

我正在尝试为以下任务录制 Micro,但失败了。

工作簿中有三个工作表,名为 Sheet1、Sheet2、Sheet3。工作表 1 有一些引用工作表 2 的列我想要一个微型计算机,它将数据从工作表 2 的第一行复制并粘贴到工作表 3,并将其余数据在工作表 2 中向上移动一行,以便新数据显示在工作表 1 中。

我尝试记录微,但在剪切后将数据粘贴到第三张; sheet1 开始引用 sheet3 自动。

Sub Next_Data_1()

'

' Next_Data_1 Macro

'

 

'

    Sheets("Sheet2").Select

    Range("A1:U1").Select

    Selection.Cut

    Sheets("Sheet3").Select

    Selection.Insert Shift:=xlDown

    Sheets("Sheet2").Select

    Rows("1:1").Select

    Selection.Delete Shift:=xlUp

End Sub

【问题讨论】:

  • edit您的代码问题。
  • 不要使用Cut,在Sheet3中插入新行,然后复制Sheet2中的行,使用PasteSpecial Paste:=xlPasteValues粘贴到Sheet3;然后删除Sheet2中的行
  • 我不清楚您正在“移动”数据到Sheet3 中的哪个位置(单元格或范围)。请你澄清一下。 Sheet2Sheet3 表格中的单元格是否包含任何公式(Sheet1 显然包含)?
  • @VBasic2008 我将工作表 3 中的数据移动到第 1 行,第 1 行中的任何数据都向下移动,
  • @GMalc 删除工作表 2 中的行后,我失去了对工作表 1 的引用

标签: excel vba


【解决方案1】:

复制而不影响公式

  • 调整 constants 部分(包括工作簿)中的值以满足您的需要。
  • ThisWorkbook 表示包含此代码的工作簿。
  • 这会将源工作表 (src) 中的数据“移动指定的第一列 (srcFirstCol) 到最后一列 (srcLastCol ) 在指定行 (srcRow) 中,目标工作表 (tgt) 中的指定行 (tgtRow) 从指定列 (tgtFirstCol) 开始。

守则

Sub Next_Data()
    
' Constants
    
    ' Source
    Const srcName As String = "Sheet2"
    Const srcFirstCol As Variant = "A"   ' e.g. "A" or 1
    Const srcLastCol As Variant = "U"    ' e.g. "A" or 1
    Const srcRow As Long = 1
    
    ' Target
    Const tgtName As String = "Sheet3"
    Const tgtRow As Long = 1
    Const tgtFirstCol As Variant = "A"   ' e.g. "A" or 1
    
    ' Other
    Dim wb As Workbook: Set wb = ThisWorkbook
    
' Define worksheets.
    
    Dim src As Worksheet: Set src = wb.Worksheets(srcName)
    Dim tgt As Worksheet: Set tgt = wb.Worksheets(tgtName)
    
' Copy Row Range
    
    Dim rng As Range
    ' Define Row Range (rng) in Source worksheet (src).
    Set rng = src.Range(src.Cells(srcRow, srcFirstCol), _
                        src.Cells(srcRow, srcLastCol))
                              
    ' Insert an empty row in Target Row (tgtRow) in Target worksheet (tgt).
    tgt.Rows(tgtRow).Insert
    
    ' Copy values from Row Range (rng) to inserted row (tgtRow)
    ' in Target worksheet (tgt) starting from Target First Column (tgtFirstCol).
    tgt.Cells(tgtRow, tgtFirstCol) _
      .Resize(rng.Rows.Count, rng.Columns.Count).Value = rng.Value
    
' Remove Row Range
    
    ' Define last cell range containing data (rng).
    Set rng = src.Cells.Find("*", , xlValues, , xlByRows, xlPrevious)
    If rng Is Nothing Then Exit Sub ' Empty worksheet.
    
    ' Calculate Last Row containing data (LastRow).
    Dim LastRow As Long: LastRow = rng.Row

    ' Define the rows containing data (rng) starting from Source Row (srcRow).
    Set rng = src.Rows(srcRow & ":" & LastRow)
    
    ' 'Shift' the data one row up.
    rng.Value = rng.Offset(1).Value
        
' Inform user.
    
    MsgBox "Moved data successfully.", vbInformation, "Success"
    
End Sub

【讨论】:

    猜你喜欢
    • 2023-02-02
    • 2020-06-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多