将数据复制到另一个工作表

时间:2015-11-25 08:22:13

标签: excel vba excel-vba copy find

我无法理解以下功能正在做什么。

该功能本身可以将数据复制到工作表Sheet History。但是,我不知道它是怎么做的?

Sub histFunc()

Dim Y As String
Y = "R" & Range("G7").Value

    Sheets("Sheet History").Select
    Range("h17").Select

    Cells.Find(What:=Y, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
        xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
        , SearchFormat:=False).Activate
    Range(Selection, Selection.End(xlToRight)).Select
    Application.CutCopyMode = False
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False
    Application.CutCopyMode = False
    Sheets("Sheet Current").Select

End Sub

有关此宏如何运行的任何建议吗?

感谢您的回复!

2 个答案:

答案 0 :(得分:1)

简而言之,代码会在工作表历史记录中搜索 G7 中的值,并用值仅替换该行的右侧部分,即删除引用或值。

逐步说明

获取单元格G7的值:

Y = "R" & Range("G7").Value

选择工作表工作表历史记录并选择单元格 H17

Sheets("Sheet History").Select
Range("h17").Select

Find上执行Cells方法,表单中的所有单元格(请注意,如果没有给出参数,则它是当前工作表中所有单元格的范围):

Cells.Find(What:=Y, After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
    xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
    , SearchFormat:=False).Activate

返回:

  

一个Range对象,表示找到该信息的第一个单元格。

有关详细信息,请参阅Find documentation。 现在由于.Activate,在找到值的位置选择(第一个)单元格。此选择扩展到行尾:

Range(Selection, Selection.End(xlToRight)).Select

然后CutCopyMode停用了clear the clipboard after usage

Application.CutCopyMode = False

现在复制并粘贴选定的单元格:

Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False

请注意,它们会粘贴在相同位置上的PasteSpecial上,使用xlPasteValues仅维护值,因此不会在其中包含任何公式和参考细胞

现在转到 Sheet Current

Sheets("Sheet Current").Select

答案 1 :(得分:0)

经过一些清洁后,这可能是这样的(下面的解释):

Sub histFunc()
Dim FindRange As Range, _
    LookForValue As String
LookForValue = "R" & Range("G7").Value

With Sheets("Sheet History")
    .Range("h17").Activate
    Set FindRange = .Cells.Find(What:=LookForValue, _
                    After:=ActiveCell, _
                    LookIn:=xlFormulas, _
                    LookAt:=xlPart, _
                    SearchOrder:=xlByRows, _
                    SearchDirection:=xlNext, _
                    MatchCase:=False, _
                    SearchFormat:=False)

    Application.CutCopyMode = False

    Range(FindRange, FindRange.End(xlToRight)).Copy
    FindRange.PasteSpecial Paste:=xlPasteValues, _
                           Operation:=xlNone, _
                           SkipBlanks:=False, _
                           Transpose:=False
End With

Application.CutCopyMode = False
Sheets("Sheet Current").Select

End Sub

我将Y更改为LookForValue以便更好地理解,并使用Range变量来引用Find方法的结果。

所以这段代码,一步一步:

  1. LookForValue定义为"R" & Range("G7").Value
  2. Sheet History
  3. 的公式中搜索该值
  4. 复制数据块(在结果行中,从结果到右边,直到有空白)
  5. 将它粘贴在同一个地方但在中,以便您摆脱公式!