2015-11-25 80 views
0

我無法理解下面的函數在做什麼。將數據複製到另一個工作表

該功能本身有能力將數據複製到工作表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 

任何建議這個宏如何操作?

我很感謝你的回覆!

回答

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 

我改變YLookForValue更好地理解和使用範圍變量引用Find方法的結果。

所以這個代碼,分步:

  1. 定義LookForValue作爲"R" & Range("G7").Value
  2. 搜索該值在Sheet History
  3. 複製數據塊(的公式結果的行中,從結果到右邊,直到有一個空白)
  4. 粘貼它在相同的地方,但在,以便你擺脫公式!
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 

這將返回:

表示第一小區A 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只維護這些值,因此不在單元中具有任何公式或引用。

現在去板集

Sheets("Sheet Current").Select 
相關問題