VBA Excel 2003/2007:声明,填充和传递锯齿状阵列

时间:2014-01-22 19:51:24

标签: excel vba excel-vba

我已经彻底研究了这个主题,但还没有找到能够完成我需要做的事情的代码。简而言之,我正在创建一个生产跟踪计划,我现在正在工作的功能涉及准确跟踪5名员工的休假日。包含5个列表框的用户表单(每个员工一个)用于选择每个员工在一周内起飞的日期。当我尝试创建包含每个员工休假的独特动态数组时,问题就来了。我想出了如何创建一个捕获此信息的数组,但它是一个每次循环迭代时重新分配的数组。我需要为每位员工提供一个独特的数组,其中包含他休假的日期,以便稍后在代码中使用,以根据他的工作日期调整每周评分。下面是我在userform中的代码,用于创建一个创建锯齿状数组:

Public Name_Jagged() As Variant

For Each Name In Name_Array
    Set Unique_Listbox = Controls(Name & "_Vacation")
    For UnSelected = 0 To Unique_Listbox.ListCount - 1
        If Unique_Listbox.Selected(UnSelected) = False Then
            ReDim Preserve Name_Jagged(0 To UBound(Name_Jagged) + 1)
            Name_Array(Name) = Name_Jagged()
            Name_Jagged(UBound(Name_Jagged)) = Unique_Listbox.List(UnSelected)
        End If
        For UnSelected_Array_Pos = LBound(Name_Jagged) To UBound(Name_Jagged)
            MsgBox Name & "_" & Name_Jagged(UnSelected_Array_Pos)
        Next UnSelected_Array_Pos
    Next UnSelected
Next Name

编译器不允许我使用Public Name_Jagged()()作为Variant,尽管大多数其他论坛都说它是应该如何编写的。我在网上找到的关于这个锯齿状阵列声明问题的唯一一篇文章没有得到解答。

我真的很感谢你的帮助。我已经能够从以前的线程中找出所有的东西,但这让我望而却步。如果有一个比锯齿状阵列更好的选择来实现这一目标,我会全力以赴。我在一些论坛上读过关于使用列表的内容,但我对它们一无所知或者在这一点上如何使用它们。在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

只是一个想法,但为什么每个员工有5个静态列表框? 为什么不只有1个包含员工姓名的列表框和1个包含一周中几天的列表框。您突出显示您想要的员工,然后选择他们已经起飞的日期。点击提交按钮,将员工姓名加载到选定日期的数组中?数组可以像这样构建

  

NAME |星期一|星期二|星期三|星期四|星期五|星期六|星期日

     
    

JIM ..... OFF ............ OFF

         

ERIC ....................... OFF OFF .............

  

等等。这样,如果您以后需要添加人员,只需将其添加到列表框中即可。你会想要一个简单的数组来处理吗?

你还说“要在代码后期使用,根据他的工作日期调整每周评分”

建议;您可能需要考虑将其记录到一个简单的mysql / mssql数据库中,这将为您提供更大的灵活性和对未来的控制。