2015-11-15 63 views
0

我在Excel上創建了一個ListBox ActiveX。我想根據在列表框中選擇的內容在工作表上添加不同的數據。例如現在選擇「Semaine 48」,數據是111和222.單擊列表框時更改表單中的數據

但是我想要的不是用vba代碼設置數據,而是當用戶選擇「Semaine 47」並更改實例111在其他情況下,更改將被保存,當用戶關閉並再次打開文件時,數據仍會更改(而不是111)

您能否幫忙?

enter image description here

Private Sub ListBox1_Click() 

Dim tableau(1, 2) As String 
tableau(0, 0) = "1" 
tableau(1, 0) = "2" 

tableau(0, 1) = "11" 
tableau(1, 1) = "22" 

tableau(0, 2) = "111" 
tableau(1, 2) = "222" 

Dim I As Integer 
I = ListBox1.ListIndex 

Select Case (I) 
    Case Is = 0 
    Range("A11") = tableau(0, 0) 
Range("B11") = tableau(1, 0) 

    Case Is = 1 
    Range("A11") = tableau(0, 1) 
Range("B11") = tableau(1, 1) 

    Case Is = 2 
    Range("A11") = tableau(0, 2) 
Range("B11") = tableau(1, 2) 

End Select 
End Sub 
+0

您可以使用'worksheetchange'事件根據您的列表框的選擇來更改源值...但是...如果值來自vba本身,則不可能...(好吧,有可能,但你不想要這樣) –

+0

那最好的做法是什麼?如果我希望用戶可以根據列表框的選擇具有不同的值,並且他所做的更改已註冊?謝謝 – morg

+0

有了sheet2中的數據...,那麼列表中的選定項目#是sheet2的行(+1)...,它有一個'worksheetchange'事件,它將把A11/B11中的變化放到相應的單元格中在sheet2中......你只需要停用它的時間你的列表將數據放在A11/B11中......我會在我回到家後立即寫一個簡短的例子...... –

回答

0

OK,asuming(如在評論說)sheet2看起來像這樣:

| A | B | 
1 | item1a | item1b | 
2 | item2a | item2b | 
3 | item3a | item3b | 
4 | item4a | item4b | 
... 
在模塊

然後:

Option Explicit 'You don't need that, but i recommend it 

Public iLBItem As Long 'this is needed here (not in a sub) 

更改您的列表框,代碼:

Private Sub ListBox1_Click() 'still, i recommend using ListBox1_Change() 
    Dim i As Integer 
    iLBItem = 0 
    i = ListBox1.ListIndex + 1 
    Sheet1.Cells(11, 1).Value = Sheet2.Cells(i, 1).Value 
    Sheet1.Cells(11, 2).Value = Sheet2.Cells(i, 2).Value 
    iLBItem = i 
End Sub 

它和你的代碼一樣,但是從sheet2中選取值。

添加在板在您的列表框出現:

Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
    If iLBItem Then 
    If Target.Address = "$A$11" Then Sheet2.Cells(iLBItem, 1).Value = Sheet1.Cells(11, 1).Value 
    If Target.Address = "$B$11" Then Sheet2.Cells(iLBItem, 2).Value = Sheet1.Cells(11, 2).Value 
    End If 
End Sub 

不管什麼時候在片改變,它會檢查iLBItem<> 00算作虛假/ >0算作真正=>只是If iLBItem Then將工作)。如果這是真的,它將檢查更改地址Target.Address。這裏有$A$11$B$11它只是簡單地把這張紙的值放到sheet2中保存在iLBItem中的那一行。

如果您還有任何問題,請寫評論。 :)

+0

謝謝Dirk爲您的消息。但是當我單擊列表中的項目時,是否可以只使用一個工作表並在此工作表中更改單元格值?最重要的是單元格的值將被用戶改變,我希望當我關閉文件並重新打開它時,我們仍然有這些值。這就像基本上有三張紙一樣。謝謝 – morg

+0

您可以將'Sheet2.Cells(i,1).Value'更改爲'Sheet1.Cells(i + 100,1).Value'以將源表設置爲firstSheet(從第101行開始)。但是,在打開工作簿之後,你的列表框通常沒有選擇,這使得不可能知道什麼數據被鏈接了......仍然可以將'iLBItem'也改變成一個單元格,比如'Sheet1.Cells(100,1 ).Value'具有'A100'作爲您的'Worksheet_SelectionChange'的參考 –

相關問題