【问题标题】:VBA - Returning an array of strings from a function, array elements are blanked outVBA - 从函数返回字符串数组,数组元素被空白
【发布时间】: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_OpenWorksheet_Activate 函数没有被正确触发,因为我正在处理这个问题;如果我翻转工作表,数组会正确初始化并且一切正常很好

【问题讨论】:

    标签: arrays excel function vba


    【解决方案1】:

    我要开枪了:你忘了在强大的click 之前打电话给InitNameGroups 吗?

    【讨论】:

    • 错过了!现在让我重现这个问题
    • 没关系,找到问题了; Workbook_OpenWorksheet_Activate 未正确触发。
    • 很高兴你找到了它。毕竟我没有错;-)
    猜你喜欢
    • 1970-01-01
    • 2013-03-25
    • 2011-09-04
    • 1970-01-01
    • 2014-02-06
    • 1970-01-01
    • 1970-01-01
    • 2013-05-15
    • 2013-05-16
    相关资源
    最近更新 更多