2015-11-18 40 views
0

我有在電子表格 塔A中的2列的電池的ID(由一個用於每個新的記錄遞增) 塔B是一個城市VBA自動填充時另一個小區popuated

名稱是當一個新的城市被添加到列B(並且只有當列B改變時)時,ID可以自動填充比先前記錄大1的值。因此,舉例來說,如果我有當前記錄集:

A B 
    ________ 
1 | ID City 
2 | 1 London 
3 | 2 Paris 
4 | 3 New York 

,我加說莫斯科列表,然後值4會自動在A列中填充?

A B 
    ________ 
1 | ID City 
2 | 1 London 
3 | 2 Paris 
4 | 3 New York 
5 | **4** Moscow 

它需要基於範圍,所以我可以輸入儘可能多的新記錄,因爲我需要。我已經嘗試過私人小組Worksheet_SelectionChange,但無法讓它工作。

任何幫助將非常感激 非常感謝

+0

向我們展示你先試過的東西,你可能並不遙遠。 –

+0

selection_change究竟出了什麼問題?什麼都沒有發生或錯誤彈出? – Lance

回答

0

拷貝到您的工作表中的VBA

Private Sub Worksheet_Change(ByVal Target As Range) 
    Dim KeyCells As Range 
    Dim xrow As Long 

    xrow = 2 
    Set KeyCells = Range("B:B") 

    If Not Application.Intersect(KeyCells, Range(Target.Address)) Is Nothing Then 
     Do 
      If Cells(xrow, 2).Value <> "" Then 
       If Cells(xrow, 1).Value = "" Then 
        Cells(xrow, 1).Value = Cells(xrow - 1, 1).Value + 1 
       End If 
      End If 
     xrow = xrow + 1 
     Loop Until Cells(xrow, 2) = "" 
    End If 
End Sub 

希望我幫助:)

+0

或嘗試:如果不相交(目標,Me.Range(「B:B」))是沒有然​​後宏只是使用戶輸入數據工作 – Lance

+0

非常酷,感謝工作的一種享受! – Stacey

1

有實施時要考慮幾件事情Worksheet_Change事件宏。

當您計劃在事件宏中更改/刪除/添加任何值到工作表時,首先要考慮的是您要觸發另一個事件,並且Worksheet_Change將嘗試在其本身之上運行。始終禁用事件與Application.EnableEvents = False處理改變任何ñ工作表,並記住與Application.EnableEvents = True離開事件宏或沒有前途的事件將觸發另一個Worksheet_Change直到事件處理重新開啓之前再次打開它。

第二件要考慮的事情是如何處理不止一個單元格接收變更。如果將多個值粘貼到B列中,則可能會發生這種情況。您還需要隔離僅粘貼到B列中的值;其他專欄可能會同時收到價值觀。

如果清除城市值並檢查城市列中的重複項是您應該爲其決定適當操作的其他考慮因素,那麼如何處理此ID。

Private Sub Worksheet_Change(ByVal Target As Range) 
    If Not Intersect(Target, Columns(2)) Is Nothing Then 
     On Error GoTo bm_Safe_Exit 
     Application.EnableEvents = False 
     Dim cty As Range 
     For Each cty In Intersect(Target, Columns(2)) 
      If CBool(Len(cty.Value2)) Then 
       cty.Offset(0, -1) = Application.Max(Columns(1)) + 1 
       'check for duplicates and mark xlRed if found 
       'comment or delete this if not required 
       If Application.CountIf(Columns(2), cty.Value2) > 1 Then 
        cty.Interior.Color = vbRed 
       Else 
        cty.Interior.Pattern = xlNone 
       End If 
      Else 
       'not sure whether you want to clear the 
       'ID column if the city column is cleared 
       cty.Offset(0, -1).ClearContents 
       'or clear any background fill from a duplicate 
       cty.Interior.Pattern = xlNone 
      End If 
     Next cty 
    End If 
bm_Safe_Exit: 
    Application.EnableEvents = True 
End Sub 

雖然我使用application.Max以確保一個唯一的編號,在列A的ID可以手動不脫離事件宏任何干擾編輯。

有可與Worksheet_Change很多事情要做。以上是一個非常好的框架,可以幫助您開始,並且您應該能夠在「着色內部線條」的同時擴展其功能。