【发布时间】:2014-09-08 23:56:37
【问题描述】:
我正在使用 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
问题是,当我检查 CleanSource_Yes_Click 函数中的 Names 数组时,它具有预期的 number 个元素,但所有元素都是空白的(导致 CheckStatus函数因运行时错误而失败)。这发生在 all 我的复选框处理程序中,并且 all 尝试检索其中一个名称数组给了我相同的结果。
我的问题是,为什么元素返回空白?我没有在点击处理程序中正确声明Names 数组,还是我没有声明GetNames 函数正确返回一个数组?
这个方案曾一度奏效,但我显然尝试过做一些聪明的事情,结果却打破了它。我只是不知道是什么。
已解决
事实证明,Workbook_Open 和 Worksheet_Activate 函数没有被正确触发,因为我正在处理这个问题;如果我翻转工作表,数组会正确初始化并且一切正常很好。
【问题讨论】: