0

我还在学习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
4

1 回答 1

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. 每个名字只有几行还是几千行?
于 2012-11-21T02:28:16.823 回答