2015-07-03 89 views
0

我已經將值放在從C到F的列中,G是從這些單元格(C到F)的計算。如果數值發生變化,使用Excel VBA自動移動到單元格

當我把數字放在單元格F的末尾時,是否有辦法自動移動到下一行的單元格C?

我曾嘗試使用宏加VBA,但它似乎有問題。

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$H$6" Then 
     Call Macro1 
    End If 
End Sub 

MACRO

Sub Macro1() 
' 
' Macro1 Macro 
' 
    ActiveCell.Offset(1, -3).Range("A1").Select 
End Sub 

在H6,我用F單元的總和來觸發它,但它沒有工作。

Image

回答

0

您的電池H6只檢查。它只會在您輸入H6其他單元格不起作用時纔會移動。

因此,測試了F列(6號):

if Target.Column = 6 then 
    .... 
endif 

由於acive細胞可能是下面的一個編輯(如果用戶按下輸入)或其他地方(如果用戶只需點擊另一個地方)使用ActiveCell將是一件壞事,使用更改的行來代替:

if Target.Column = 6 then 
    call Macro1(Target.row) 
end if 


Sub Macro1(row as integer) 
    Worksheets("TheNameOfTheSheet").Cells(row,3).Select 
end sub 
0

此代碼只會如果用戶更改單元格H6值火災。如果該值因計算而改變(即由於用戶更改了另一個單元格中的值),它不會觸發。這是在https://msdn.microsoft.com/en-us/library/office/ff839775.aspx工作表更改事件的MSDN文檔中提到的。

此外,我建議不要使用ActiveCell.Offset,因爲您不知道在運行macro1時哪個單元將處於活動狀態。如果用戶在F6中輸入一個數字並按下Enter鍵,則F7變爲Activecell,但如果用戶鍵入了一個數字並按下右箭頭鍵,則它將是單元格G6。

而不是使用ActiveCell的,你可以使用目標從更改事件,因爲我們知道的是,在更新單元:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Address = "$F$6" Then 
     Macro1 LastCell:=Target 
    End If 
End Sub 

Sub Macro1(LastCell As Range) 
    LastCell.Offset(1, -3).Select 
End Sub 

如果你有數據的多行,並希望重複對於F中的許多單元格,您可能想要測試特定的Colum(F)和一系列行號,而不是一個單元格地址。除非你正在做更復雜的事情,否則也沒有必要調用一個單獨的sub。您可能想要嘗試以下內容:

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Target.Column = 6 Then 
     If Target.Row > 1 And Target.Row < 10 Then 
      Target.Offset(1, -3).Select 
     End If 
    End If 
End Sub 

(您需要根據需要調整行號)。

相關問題