VBA - 从函数返回一个字符串数组,数组元素被清空

时间:2014-07-17 23:06:45

标签: arrays excel function vba

我正在使用Excel 2010开发一种智能清单应用程序,因为我是受虐狂。

我正在尝试从函数返回一个字符串数组;当我在调试器中检查它时,返回的数组具有预期的元素数,但内容为空。我需要有人告诉我我做错了什么。

我在模块级别(在创造性地命名为Module1)中声明了一组字符串数组,如下所示:

Private BuildTestGroup(0 To 3) As String
Private CodingStandardsGroup(0 To 16) As String
Private ConfigFilesGroup(0 To 2) As String
Private TestingGroup(0 To 1) As String
Private DeploymentGroup(0 To 0) As String

当工作表在同一模块中加载以下函数时,它们被初始化:

Sub InitNameGroups()

  BuildTestGroup(0) = "CleanSource"
  BuildTestGroup(1) = "ApplyPatch"
  BuildTestGroup(2) = "BuildPatch"
  BuildTestGroup(3) = "VerifyBuild"

  CodingStandardsGroup(0) = "InputCheck"
  CodingStandardsGroup(1) = "InitializeCheck"
  ...
End Sub

从这里打来:

Private Sub Workbook_Open()
  Call Module1.InitNameGroups
  Call Module1.SetCalledFromSource(False)
End Sub

响应工作表中复选框上的单击事件,将检索其中一个数组:

Sub CleanSource_Yes_Click()
  '
  ' Only execute this code in response to an event on the worksheet;
  ' do not execute if called from another function like UpdateGroup
  '
  If Module1.CalledFromSource = False Then  
    Dim Names() As String
    '
    ' Get the names of all button groups for the BuildTest section
    '                           
    Names = Module1.GetNames("BuildTest")
    '
    ' check Yes box, uncheck No and NA
    '
    Call Module1.UpdateGroup("CleanSource", "Yes") 
    '
    ' if all Yes checkboxes in BuildTest
    ' group have been set, set group
    ' label to Complete
    '
    Call Module1.CheckStatus("BuildTest", Names)   
  End If                                           
End Sub                                           

再次使用以下函数Module1

Function GetNames(GroupName As String) As Variant
  If GroupName = "BuildTest" Then
    GetNames = BuildTestGroup
  ElseIf GroupName = "CodingStandards" Then
    GetNames = CodingStandardsGroup
  ElseIf GroupName = "ConfigFiles" Then
    GetNames = ConfigFilesGroup
  ElseIf GroupName = "Testing" Then
    GetNames = TestingGroup
  Else
    GetNames = DeploymentGroup
  End If
End Function

问题在于,当我检查Names函数中的CleanSource_Yes_Click数组时,它具有预期的数字元素,但所有元素都是空白的(导致CheckStatus函数失败并出现运行时错误)。这发生在所有我的复选框处理程序中,并且所有尝试检索其中一个名称数组会给我相同的结果。

我的问题是,为什么元素会变回空白?我没有在点击处理程序中正确声明Names数组,还是我没有声明GetNames函数正确返回数组?

这个计划曾经有过一段时间,但我显然已经尝试过做一些聪明的事情并且最终打破它。我只是不知道是什么。


解决

事实证明Workbook_OpenWorksheet_Activate函数没有被正确触发,因为我正在研究这个问题;如果我翻转工作表,数组会正确初始化,一切正常就好了

1 个答案:

答案 0 :(得分:0)

我只拍了一张照片:你忘了在强大的InitNameGroups之前的任何地方打电话给click吗?