Excel:如果选择了列表框值n2,则更改另一个单元格的值

时间:2015-12-01 02:20:14

标签: excel excel-vba listbox vba

所以基本上,我有一个列表框(名为ListBox1),其中包含4个值(让他们调用它们" value1"," value2"等)。我想要做的是以下伪代码:

if (value1 is selected)
    then change the formula in cell A1 to "=B1/B2"
elseif (value2 is selected)
    then change the formula in cell A1 to "=ROUND(B1/B2,0)"
elseif (value3 is selected)
    then change the formula in cell A1 to "=ROUNDUP(B1/B2,0)"
elseif (value4 is selected)
    then change the formula in cell A1 to "=ROUNDDOWN(B1/B2,0)"

(使用宏将是最好的)

看起来很简单,但我找不到任何可以告诉我如何在任何地方执行此操作的教程。

我试过了:

Sub ListBox1_Change()
    If ListBox1.Selected("value1") Then range("A1").Formula = "=B1/B2"
    ElseIf ListBox1.Selected("value2") Then range("A1).value = "=ROUND(B1/B2,0)"
    ' so on so forth
    EndIf
End Sub

但它没有用。

提前致谢

2 个答案:

答案 0 :(得分:2)

做到这一点很简单:

Private Sub ListBox1_Change()
  If ListBox1.Selected(0) Then Range("A1").Formula = "=B1/B2"
  If ListBox1.Selected(1) Then Range("A1").Formula = "=ROUND(B1/B2,0)"
  If ListBox1.Selected(2) Then Range("A1").Formula = "=ROUNDUP(B1/B2,0)"
  If ListBox1.Selected(3) Then Range("A1").Formula = "=ROUNDDOWN(B1/B2,0)"
End Sub

或以不同的方式:

Range("A1").Formula = Array("=B1/B2","=ROUND(B1/B2,0)","=ROUNDUP(B1/B2,0)","=ROUNDDOWN(B1/B2,0)")(ListBox1.ListIndex)

适用于您的情况: 您已在框中设置了值的范围 将输出设置为A1。然后将宏设置到列表框:(选择“新建”)

Sub Listbox_OnChange()
  Range("A1").Formula = Array("", "=B1/B2", "=ROUND(B1/B2,0)", "=ROUNDUP(B1/B2,0)", "=ROUNDDOWN(B1/B2,0)")(Range("A1").Value)
End Sub

主要问题是你的ListBox不是真正的 ListBox,也不能像一个一样使用。您需要使用ActiveXObject来完成它,就像我的答案中的第一部分一样。

答案 1 :(得分:0)

我设法在不经过VBA代码的情况下完成了这项工作。我将列表框指向单元格A2,并将其值更改为value1value2等。

然后,在单元格A1中:

=IF(A2="value1";B1/B2;
  IF(A2="value2";ROUND(B1/B2;0);
    IF(A2="value3";ROUNDUP(B1/B2;0);
      IF(A2="value4";ROUNDDOWN(B1/B2;0);"")
    )
  )
)