2015-11-16 112 views
0

我試圖設置一個輸入表,用戶可以輸入每平方英尺租金或年租金,並且輸入一個,另一個輸入時解決。下面是我創建的宏。它不工作(我明白爲什麼不),因爲它引起了循環引用。我還試着用兩個單獨的if語句(沒有OR)而不是嵌套的if/OR和if else。所以,基本上,如果一個目標地址被觸發,我不希望宏在另一個上運行(並創建循環引用)。任何建議,將不勝感激。Target.Address循環參考

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Target.Address = Range("Current_Rent").Address Or Target.Address = Range("CurrentRentperSqFt").Address Then 
     If Target.Address = Range("Current_Rent").Address Then 
      Range("CurrentRentperSqFt").Value = "=IF(ISERROR(Current_Rent/SqFt),"""",Current_Rent/SqFt)" 
     Else 
      Range("Current_Rent").Value = "=IF(ISERROR(CurrentRentperSqFt*SqFt),"""",CurrentRentperSqFt*SqFt)" 
     End If 

    End If 

End Sub 

回答

0

您正在使用Worksheet_Change事件宏更改其中一個單元格。這會觸發另一個事件,並且Worksheet_Change會嘗試使用新的Target自行運行。您需要禁用事件,以便在不觸發其他事件的情況下進行更改。

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Target.Address = Range("Current_Rent").Address Or Target.Address = Range("CurrentRentperSqFt").Address Then 
     On Error GoTo bm_Safe_Exit 
     Application.EnableEvents = False 
     If Target.Address = Range("Current_Rent").Address Then 
      Target.Formula = "=IFERROR(CurrentRentperSqFt*SqFt,"""")" 
     Else 
      Target.Formula = "=IFERROR(Current_Rent/SqFt,"""")" 
     End If 

    End If 
bm_Safe_Exit: 
    Application.EnableEvents = True 
End Sub 

我還修改了公式中使用,避免運行方程再次運行到產生結果之前,檢查錯誤的重複的新IFERROR¹ function


¹IFERROR¹ function用Excel 2007中引入的。它是不是在早期版本。

+0

謝謝!我試了一下,它的工作。我感謝您的幫助! – DPM