我正在使用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_Open
和Worksheet_Activate
函数没有被正确触发,因为我正在研究这个问题;如果我翻转工作表,数组会正确初始化,一切正常就好了。
答案 0 :(得分:0)
我只拍了一张照片:你忘了在强大的InitNameGroups
之前的任何地方打电话给click
吗?