Arrays VBA-从函数返回字符串数组时,数组元素被消隐

Arrays VBA-从函数返回字符串数组时,数组元素被消隐,arrays,excel,function,vba,Arrays,Excel,Function,Vba,我正在使用Excel 2010开发一种智能清单应用程序,因为我是一个受虐狂 我试图从函数返回字符串数组;在调试器中检查时,返回的数组具有预期的元素数,但内容为空。我需要有人告诉我我做错了什么 我在创造性命名的模块1中声明一组模块级别的字符串数组,如下所示: 当工作表在同一模块中加载以下函数时,它们将被初始化: Sub InitNameGroups() BuildTestGroup(0) = "CleanSource" BuildTestGroup(1) = "ApplyPatch"

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

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

我在创造性命名的模块1中声明一组模块级别的字符串数组,如下所示:

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

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                                           
使用以下功能,同样来自模块1:

问题是,当我在CleanSource_Yes_Click函数中检查Names数组时,它具有预期的元素数,但所有元素都为空,导致CheckStatus函数因运行时错误而失败。我所有的复选框处理程序都会出现这种情况,所有检索其中一个名称数组的尝试都会得到相同的结果

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

这个计划曾经奏效过,但很明显,我试图做一些聪明的事情,结果却失败了。我只是不知道是什么

解决


由于我的工作方式,工作簿打开和工作表激活功能没有被正确触发;如果我翻动工作表,数组将正确初始化,一切正常。

我只做了一次尝试:在强大的单击之前,您是否忘记在任何地方调用InitNameGroups?

错过了!现在让我重现问题的来龙去脉,发现问题;工作簿\u打开和工作表\u激活未正确触发。很高兴您找到它。好像我根本没有错-
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                                           
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