2013-07-09 61 views
1

這是我的代碼。我正在閱讀一張紙,並在另一張紙上搜索該詞。如果搜索找到匹配項,它將複製整行並將其粘貼到第一張紙上。搜索,複製和粘貼工作。我沒有收到錯誤,但它好像不會停止,因爲Excel不會讓我點擊宏讀取的原始單元格。我是否錯過了應該結束宏的一行代碼?理想情況下,它應該在粘貼後結束宏。如何退出宏

我去了,從另一個線程的代碼: How to Paste copied Row from one Sheet to Another

Sub Ref() 

Dim rng1 As Range 
Dim rng2 As Range 

If Range("A11") = "SELECT" Then 
    Else 
    Set rng1 = Worksheets("MAIN").Range("A11") 
    For Each rng2 In Worksheets("REF").Range("A11:A2000") 

     If rng1 = rng2(1).Value Then 
      rng2.EntireRow.Copy 
      rng1.EntireRow.PasteSpecial (xlPasteFormulas) 
      Exit For 
     End If 

    Next rng2 
End If 
End Sub 

這就是我所說的宏觀

Private Sub Worksheet_Selection_Change(ByVal Target As Range) 
    Call Ref 
End Sub 

預先感謝您

+0

您是如何運行您的程序的?點擊按鈕或事件? –

+0

我有問題來幫助我的無知。 「工作表」(「REF」)中是否可以有多個「rng2」。範圍(「A11:A2000」)?不會只有一個? – Smandoli

+0

安迪 - 主調用宏的選擇變化 – Sarah

回答

1

你需要停止貼從重新觸發變化事件:

... 
Application.EnableEvents=False 
rng1.EntireRow.PasteSpecial (xlPasteFormulas) 
Application.EnableEvents=True 
... 

編輯:您應該使用worksheet_change事件,而不是selection_change。您可以處理啓用該事件的事件:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If not application.intersect(me.range("A11"),Target) is nothing then 
     Application.EnableEvents=False 
     Call Ref 
     Application.EnableEvents=True 
    End if 
End Sub 
+0

如果我切換True和False,複製和粘貼工作,我可以點擊不同的單元格,但如果我第二次更改單元格中的內容,它將不會複製和粘貼。單元格A11是一個下拉列表,以防我沒有提到這一點。任何想法爲什麼它不會粘貼新的數據與另一個新的選擇?我認爲隨着單元格更改,宏將運行。 – Sarah

+0

如果您切換true和false,那麼您退出的事件仍然處於禁用狀態,並且下次您選擇某個值時不會觸發任何更改事件。該設置是持久性的 - 除非將其設置回來,否則不會設置爲true。 –