单击列表框

时间:2015-11-15 00:03:01

标签: excel vba excel-vba

我在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

1 个答案:

答案 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<> 00计为false / >0计为true =&gt;只是{{ 1}}会工作)。如果这是真的,它将检查更改If iLBItem Then的地址。这里有Target.Address$A$11,只会将此工作表的值放在sheet2中$B$11中保存的行中。

如果您还有任何疑问,请写下评论。 :)