将VBA表单中的复选框,广播和下拉值插入Excel电子表格

时间:2012-10-29 02:37:01

标签: excel vba

关于将VBA表单中的复选框,广播和下拉值插入Excel电子表格,我有一个多方面的问题。我正试图在我的代码中考虑几个案例场景。

我要插入的第一组项目是复选框,其中包含以下名称/值:

Name         Value
==========   =====
chk_week1    1
chk_week2    2
chk_week3    3
chk_week4    4
chk_week5    5
chk_week6    6
chk_week7    7
chk_week8    8
chk_week9    9
chk_week10   10
chk_week11   11
chk_week12   12
chk_week13   13
chk_week14   14
chk_week15   15

如果用户选中了多个复选框,则应将其插入1,2,4,5格式 - 例如,如果用户选择chk_week1, chk_week2, chk_week4 and chk_week5


我要插入的第二组项目是来自广播组的单个选择,其中包含fr_Priority帧内的跟随名称/值:

Name         Value
==========   =====
priority_y   Yes
priority_n   No

因此,如果用户选择priority_y,则会在Excel电子表格中插入Yes


我要插入的第三组项目来自三个下拉菜单。这非常简单,但用户需要在所有三个下拉列表中进行选择。如果他们对偏好不感兴趣,则选择'No Preference'。如果用户做出此决定,则不应将任何内容插入到单元格中。存在以下名称/值:

Name         
==========   
cbo_fac1   
cbo_fac2
cbo_fac3   

例如,如果用户在 cbo_fac1 cbo_fac2 cbo_fac3 中选择了111,222,No Preference,那么只有{{1}插入。如果选择111,222,则仅插入111,No Preference,No Preference


这是我现在正在使用的代码:

111

提前非常感谢!

1 个答案:

答案 0 :(得分:1)

关于你究竟遇到什么问题的一些说明会帮助我给你一个更好的答案。它听起来像是你试图填充一个未知大小的范围,因为用户可以在第一组中选择多达15个项目,在第二组中选择1个,在第三组中最多选择三个。所以,我首先要制作一些数组来保存用户选择的项目,如...

      Dim group1 as arraylist
      Dim group2 as arraylist
      Dim group3 as arraylist

      ' Go through checkboxes and add values if they are checked
      if checkbox1.checked = true then
       group1.add(1)
      end if ' do that for each checkbox or if you have a checklistbox do 

      for each thing in checklistbox1
        if thing.checked=true then
        group1.add(checklistbox1.indexof(thing)-1)
        end if
        next

对第2组和第3组执行相同类型的操作

        if not dropdown1.selecteditem = "no preference" then
          group3.add(...)
         end if ' so an and so forth

现在,您可以将group1,group2和group3添加到工作表中,如

         Dim StartingRange as range = ws.Cells(Rows.Count, "a").End(xlUp)
         Dim total_items as integer = (group1.items.count + group2.items.count + group3.items.count)

我不知道你想在行或列中添加项目的方式,但你可以通过...来确定起始范围的大小。

           startrange.resize(totalitems, 1) ' resizes range to 1 column and total items in rows

然后

           Dim cell as variant

          for each cell in startrange
            cell.value = group1.item(0)
            group1.removeat(0)   ' this effectively moves the item at index 1, to index 0
             next 

为其他小组做

如果这没有帮助,请告诉我。我的VBA有点生疏,所以我可能错过了代码中的一些内容,比如'Set'范围等,所以我为此道歉。