将数据移至另一张工作表

问题描述 投票:0回答:1

这段代码需要做的事情:

  1. 在第2张工作表上,它应该选择B2及以下范围内的所有数据单元格,一直到H2并一直向下,以选择包含数据的所有单元格。该表确实包含大量数据...
  2. 同一工作表,宏还应将此选择向下移动 1 行。也就是说,B2:H2 的数据现在应该在 B3:H3 上,最后选定的行应该是 B(n+1):H(n+1)
  3. 工作表 1,它应该选择 Bx:Hx 范围内选定行上的单元格。也就是说,例如我点击B4,它应该选择B4:H4。我点击C5,它应该选择B5:H5。
  4. 第 1 张,应该剪切此选择
  5. 第 2 张,应该粘贴所选内容
  6. 如果可能的话,假定工作表包含单元格 B2:H5 中的数据,并且我选择(并剪切)B3:H3,代码应将 B4:H5 向上移动一行,以清除一些空白空间。

在下面的代码中,

Set Sel = Union(...)
行在 Excel VBA 编辑器中突出显示。
我想当我尝试删除“将尝试向下移动选择”部分时,它起作用了。这里可能出了什么问题?

Sub Button_Click()
    'Declaring variables
    Dim Rng As Range, Sel As Range
    Dim ws As Sheet2
    Dim OldRow As Long, TargetRow As Long
    
    'Selects range on Sheet 2
    Set Sel = ws.Range("A" & ActiveCell.Row)
    For Each Rng In Selection.Areas
        Set Sel = Union(Sel, Intersect(Rng.EntireRow, Range("A:C")))
    Next Rng
    Sel.Select
     
    'Will try to move selection down
    OldRow = 1
    TargetRow = 2
    
    ws.Range("A1").Resize(NumRows).Range("B:H").Cut
    ws.Range("A" & TargetRow + NumRows).Range("B:H").Insert shift:=xlDown
    
    'Copies selected row to Sheet2
    Sel.Copy
    ws.[A1].PasteSpecial Paste:=xlPasteValues
    Application.CutCopyMode = False
End Sub
excel vba
1个回答
1
投票
  • 基于原帖中提供的代码,不需要使用

    Cut
    操作。意图似乎是
    copying values
    从sheet1到sheet。

  • 使用

    .Value
    属性赋值比使用
    PasteValues
    更高效。

微软文档:

Range.Resize 属性 (Excel)

Option Explicit

Sub Demo()
    Dim oSht1 As Worksheet, oSht2 As Worksheet
    Dim srcRng As Range
    Const CELL_CNT = 7  ' Col B to H
    Set oSht1 = Sheets("Sheet1")
    Set oSht2 = Sheets("Sheet2")
    oSht1.Activate
    Set srcRng = oSht1.Cells(ActiveCell.Row, "B").Resize(1, CELL_CNT)
    With oSht2.Range("B2").Resize(1, CELL_CNT)
        .Insert xlShiftDown
        .Value = srcRng.Value
    End With
    srcRng.Delete xlShiftUp
End Sub
© www.soinside.com 2019 - 2024. All rights reserved.