2010-01-26 90 views
0

我在Excel 2007文件中有2張工作表sheet1和sheet2。Excel,2張,2列,相同的值?

在sheet2中我有一個由窗體/宏(帶有樹視圖控件)管理的列。當一個元素被選中時,單元格被填充「x」,當它被取消選中時,單元格填充「」(無)。

在sheet1中,我想創建一個等於sheet2列的列。 例如:如果sheet2!C24 =「x」那麼sheet1!c24也應該是「x」 我也希望它能夠雙向工作。如果用戶將sheet1!c24更改爲「x」,那麼我希望sheet2!c24採用相同的值。

問題:!!!!! - 在Sheet1中,我嘗試着sheet1 C24 = Sheet2的C24,但後來當Sheet2的C24 = 「」,工作表Sheet1 C24顯示0而不是什麼 - 在Sheet2中,我試圖Sheet2的C24 = sheet1!c24,但然後單元格顯示公式(='sheet1!c24'),而不是值...

所以基本上,我想要的是,無論您做什麼更改,在Sheet1或Sheet2中, sheet1和sheet2中的列被更新... 我該如何實現這一目標?

回答

1

我認爲你需要做的是對兩張紙使用Worksheet_Change事件,如果在感興趣的列中進行了更改,則更新另一張紙上的同一個單元格。

像這樣的事情會去工作表代碼模塊中:

Private Sub worksheet_change(ByVal target As Range) 
    Dim c As Range 

    'Test to see if the cell just changed is 
    'in the column we are interested in 
    Set c = Application.Intersect(target, Range("A:A")) 
    If Not c Is Nothing Then 
     'Copy across to other sheet 
     If Not beingEdited Then 
      beingEdited = True 
      Sheet1.Range(target.Address) = target.Value 
      beingEdited = False 
     End If 
    End If 
End Sub 

你需要一個beingEdited變量聲明別的地方有更大的範圍,使你能避免觸發事件本身和Excel卡住在一個循環中。

在其他工作表中,基本上有相同的步驟,只是它會引用第一個工作表,例如, Sheet1.Range(target.Address) = target.Value

顯然,你必須調整它到你的範圍/工作表。

1

你有正確的想法,但你可能需要在更改前關閉事件,否則你會在一個循環

Private Sub worksheet_change(ByVal target As Range) 
    application.enableevents = false 
    sheet1.range("c24").value = sheet2.("c24").value 
    application.enableevents = true 
end sub 

最終只是確保你在再次啓用事件結束。

0

我做了這樣的事情,我有一張彙總表和一張測試表。當我在測試表中添加一個新值並傳遞(P)時,彙總表中的單元格將保持增量。這是爲了保持有多少測試通過的計數。這裏是:

COUNTIF(測試!$ C $ 5:$ C $ 1017,「P」);

希望這有助於。