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