2017-04-24 65 views
0

我是VBA的全新人員,因此不知道我在做什麼... 下面是我的問題和代碼的描述。宏複製粘貼代碼後不出現在列表

我原本想做的事是這樣的: 複製一個單擊的單元格,選擇新的工作表,選擇任一單元格,粘貼爲值

現在我發現,似乎做的伎倆是這樣的代碼:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Not Intersect(Target, Columns("A")) Is Nothing Then 
    Cancel = True 
    If Target.Row > 1 And Len(Target.Value) Then Worksheets("S11").Range("C2").Value = Target.Value 
    End If 
End Sub 

我說「顯然」,因爲我無法測試它。這裏的問題是:

  1. 我保存工作簿爲Excel啓用宏的工作簿
  2. 點擊了ALT + Q - 回到我的工作簿
  3. 然後我ALT F8來運行它 - 但什麼也沒有...空白....

我失蹤了什麼?

+3

的Alt-F8將僅可以運行顯示宏。 'worksheet_change'事件是'Private',因此不能公開訪問,它還需要一個參數傳遞給它,除非它被別的東西調用,否則你不能這樣做。您可以通過在代碼窗口中查找您放置的工作表來檢查它是否再次存在。但是,只要您將非空值輸入到A列(除了在單元格A1中),它就應該運行。 – YowE3K

+0

上面的宏被設計爲放置在工作表對象中,並且如果在該工作表上選擇的單元發生更改,則該宏將運行。而且,如果新激活的單元格在列A中,它似乎只做任何事情。它將'Cancel'設置爲'True',這不會在該'Event'中做任何事情(我認爲)。如果它在列A中,則它檢查它不在'行1'上,並且它不是空白的。如果是這樣,它將複製存儲在新激活單元中的值,使其成爲'S11!C2'。那實際上是你想要的嗎? – CLR

+0

非常感謝大家......它工作:) –

回答

0

在模塊中,請使用您希望使用的宏。

public sub mymacro(r as excel.range) 
If Not Intersect(r, Columns("A")) Is Nothing Then   
    If r.Row > 1 And Len(r.Value) Then Worksheets("S11").Range("C2").Value= r.Value 
    End If 
end sub 

public sub wbtest() 
    mymacro activecell 
end sub 

,並使用像這樣

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If Not Intersect(Target, Columns("A")) Is Nothing then 
     mymacro target 
    end if 
end sub