我在Excel上创建了一个ListBox ActiveX。我想根据列表框中选择的内容在工作表上放置不同的数据。例如,现在选择“Semaine 48”,数据为111和222。
但是我想要的不是用vba代码设置数据,而是当用户选择“Semaine 47”并在其他地方更改实例111时,保存更改,当用户关闭然后再次打开时文件,数据仍然改变(而不是111)
你能帮忙吗?
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 :(得分:0)
好的,asuming(如评论中所述)sheet2
看起来像那样:
| A | B |
1 | item1a | item1b |
2 | item2a | item2b |
3 | item3a | item3b |
4 | item4a | item4b |
...
然后在Module:
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
为<> 0
(0
计为false / >0
计为true =&gt;只是{{ 1}}会工作)。如果这是真的,它将检查更改If iLBItem Then
的地址。这里有Target.Address
和$A$11
,只会将此工作表的值放在sheet2中$B$11
中保存的行中。
如果您还有任何疑问,请写下评论。 :)