用于在工作表之间选择和复制的VB Excel 2010代码

时间:2012-11-20 16:45:53

标签: excel-vba vba excel

我还在学习VB。我尝试在excel 2010中录制一个VB脚本,在主工作表上选择一个名称,然后转到另一个工作表并查找具有该名称的所有行,复制所有行并返回到主工作表并将复制的单元格插入所选名称。细胞被推下。代码应重复下面的下一个名称,其中复制的单元格被粘贴。

我的录音无法完成上述所有操作。你有什么建议吗?

    Sub Macro5()
'
' Macro5 Macro
'
' Keyboard Shortcut: Ctrl+l
'
    Selection.Copy
    Sheets("Sheet1").Select
    ActiveCell.Offset(2, 3).Range("A1").Select
    Cells.Find(What:="Leeanne Hickmott", After:=ActiveCell, LookIn:= _
        xlFormulas, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:= _
        xlNext, MatchCase:=False, SearchFormat:=False).Activate
    Cells.FindNext(After:=ActiveCell).Activate
    ActiveCell.Rows("1:3").EntireRow.Select
    ActiveCell.Offset(0, -7).Range("A1").Activate
    Application.CutCopyMode = False
    Selection.Copy
    Sheets("Sheet4").Select
    ActiveCell.Offset(1, 0).Rows("1:1").EntireRow.Select
    Selection.Insert Shift:=xlDown
    ActiveCell.Offset(3, 6).Range("A1").Select
End Sub

1 个答案:

答案 0 :(得分:0)

Excel的记录宏进程无法记录使这种宏工作所需的条件或循环。它也无法记录您将值粘贴到查找对话框中,它只记录您要搜索“Leeanne Hickmott”

我的第一个建议是使用范围变量指向每个工作表上的重要单元格。例如......

Dim rngPasteHere as Range, rngCopyFrom as Range
set rngPasteHere = Selection
set rngCopyFrom = Sheets("Sheet1").Range("D1")
' find first row
set rngCopyFrom = rngCopyFrom.Cells.Find(What:=rngPasteHere.Value _
                             , After:=rngCopyFrom, LookIn:=xlFormulas _
                             , LookAt:=xlPart, SearchOrder:=xlByRows _
                             , SearchDirection:=xlNext, MatchCase:=False _
                             , SearchFormat:=False)

您还需要两个循环,一个外循环重复下一个名称的整个过程,一个内循环查找具有当前名称的所有行。在不知道你的数据是什么的情况下,我真的无法获得更具体的信息。

  1. 名称是按字母顺序排序的吗?
  2. 是否所有具有相同名称的行彼此相邻或是否与其他名称混合在一起?
  3. 每个名字只有几行还是数千?