2015-10-16 105 views
-1

我想循環工作簿的所有工作表上並複製粘貼值。這裏是我的代碼:在工作表上的工作簿中循環

Sub paste_hard() 

    Dim ws As Worksheet 
    Dim rng As Range 

    For Each ws In ActiveWorkbook.Worksheets 

     Set rng = ws.Range("A1:C500") 
     rng.Select 
     Selection.Copy 
     Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ 
     False, Transpose:=False 

    Next ws 

    Range("A1:C500") = rng 

End Sub 

問題來自rng.Select,我得到以下錯誤:

Method 'Select' of object 'Range' failed

我在VBA初學者。

回答

0

您只能在活動工作表上選擇範圍。您的錯誤正在發生,因爲您正在試圖在運行時不活動的工作表上顯示Select範圍。

一(醜陋的)解決方案將是把ws.Activate您的循環內(前Set rng = ...

instead of gunking up your code with a bunch of unnecessary Select and Activate statements,做到這一點,而不是 - 如果你只是關心,那麼你不需要做任何事情CopyPastePasteSpecial

For Each ws In ActiveWorkbook.Worksheets 

    Set rng = ws.Range("A1:C500") 
    rng.Value = rng.Value 

Next ws 

瞧,5行代碼變成兩行代碼:)

+0

感謝您的幫助。我改變了你的建議,但2個問題: – phacoo

+1

你不需要對象變量,所以變成一行:'ws.Range(「A1:C500」)= ws.Range(「A1:C500」)。Value' –

+0

1 - 活性片變爲空白(在其上沒有任何值)和2-其他工作表留,因爲它是 – phacoo

相關問題