使用VBA创建一个基于勾选的复选框更改的公式

时间:2016-11-03 14:53:10

标签: excel vba excel-vba userform

我正在尝试创建一个函数,如果在用户表单中勾选了许多复选框,则单元格A1中的公式会显示带有“选择”功能的不同公式。

如果选中所有框,我想要显示的公式是:

  

=选择(rand between(1,4),A3,A4,A5,A6)

如果仅选择某些方框,例如选择框1和3,然后公式为:

  

=选择(rand between(1,4),A3,B1,A5,B1)

其中B1是对空白单元格的引用。 下一个公式将取决于该单元格的值。

目前我采取的方法是:

   Dim a as range, b as range, c as range, d as range,
   'set cell reference with data in if checkbox is selected, blank cell reference if checkbox not selected
   If checkbox1.value=TRUE then 
   set a = range("A3")
   else
   set a = range("B1")
   end if
   'this is repeated for all checkboxes

接下来我想要它,所以A1中的公式是

  

=选择(rand between(1,4),a,b,c,d)

其中a,b,c,d是我在IF函数中确定的范围。这是我被困的地方。如果我做

   [A1]="=choose(randbetween(1,4),a,b,c,d)" 

然后公式没有取值

如果我这样做:

    Dim LValue As String
    LValue = Choose(Application.RandBetween(1, 4), a, b, c, d)
    [A1] = LValue

然后返回的所有值都是具有公式的A1的值。

有什么想法吗?

更新

感谢您的建议。在回答你的答案和我需要的公式后,灵感就来了:

[A1] = "=choose(randbetween(1,4), " & a & "," & b & "," & c & "," & d & ")"

显示变量中变量的单元格中的公式。变量必须是字符串而不是范围。

2 个答案:

答案 0 :(得分:0)

首先,您需要在d as range,之后删除逗号 然后,您需要在粘贴到公式中的文本周围添加双引号。

  [a1].Formula = "=choose(randbetween(1,4)," & Chr(34) & a & Chr(34) & "," & Chr(34) & b & Chr(34) & "," & Chr(34) & c & Chr(34) & "," & Chr(34) & d & Chr(34) & ")"

答案 1 :(得分:0)

感谢您的建议。在回答你的答案和我需要的公式后,灵感就来了:

    [A1] = "=choose(randbetween(1,4), " & a & "," & b & "," & c & "," & d & ")"

显示变量中变量的单元格中的公式。变量必须是字符串而不是范围。