2016-12-15 89 views
0

當我嘗試運行此循環時,我在Cell.Value.Copy行中得到一個Error:Object Required。我需要做什麼來解決這個錯誤?通過Loop-VBA複製單元格

Sub Findings() 
Application.ScreenUpdating = False 

Dim Cell As Object 
Dim Rng As Range 

Set Rng = Sheets("Sheet1").Range("C5:C74") 
For Each Cell In Rng 
    If (Cell.Value <> "") Then 
    Cell.Value.Copy 
    End If 
Next Cell 

If IsEmpty(Range("C85").Value) = True Then 
    Range("C85").PasteSpecial xlPasteValues 
ElseIf IsEmpty(Range("C86").Value) = True Then 
    Range("C86").PasteSpecial xlPasteValues 
ElseIf IsEmpty(Range("C87").Value) = True Then 
    Range("C87").PasteSpecial xlPasteValues 
End If 

Application.ScreenUpdating = True 
End Sub 
+1

只需使用'Cell.Copy'。 – Phylogenesis

+0

因爲隨後的循環通過循環覆蓋剪貼板中的值,所以開始「For Each Cell In Rng」的循環有點沒有意義。在VBA中,使用複製/粘貼來傳輸值幾乎沒有什麼好的理由 - 直接分配給目標範圍的'.Value'。 –

+0

@ gg315你是否在下面的答案中試過了代碼? –

回答

0

如果你只想單元格複製其值(不包括將要返回空值公式),你可以使用SpecialCells(xlCellTypeConstants)設定的範圍內。

見下面我的代碼:

Sub Findings() 

Application.ScreenUpdating = False 

Dim Rng As Range 

With Sheets("Sheet1") 
    ' set "Rng" only to cells inside the range with values inside them 
    Set Rng = .Range("C5:C74").SpecialCells(xlCellTypeConstants) 
    Rng.Copy 

    If IsEmpty(.Range("C85").Value) Then 
     .Range("C85").PasteSpecial xlPasteValues 
    ElseIf IsEmpty(.Range("C86").Value) Then 
     .Range("C86").PasteSpecial xlPasteValues 
    ElseIf IsEmpty(.Range("C87").Value) Then 
     .Range("C87").PasteSpecial xlPasteValues 
    End If 

End With  
Application.ScreenUpdating = True 

End Sub