当范围仅包含一个值时,函数将不返回数组

帐篷

我有一个函数旨在返回从单列数据列表创建的数组。实际上,我一直在使用此函数的返回值作为伪全局变量(LINENAMES_ARRAY),并将其传递给许多函数。那些功能然后检查诸如If Len(Join(LINENAMES_ARRAY)) = 0 Then带有For Each声明的项目或通过声明进行检查这是代码:

  Function LINENAMES_ARRAY() As Variant
  'returns an array of all items in the main sheet linenames column
      LINENAMES_ARRAY = Application.Transpose(MAIN.Range( _
      MAIN.Cells(MAIN_HEAD_COUNT + 1, MAIN_LINENAMES_COLUMN), _
      MAIN.Cells(LINENAMES_COUNT + 1, MAIN_LINENAMES_COLUMN)))
  End Function

我最近偶然发现了一个问题,在使用此工作簿进行新项目时看不到它,直到发现它,如果数组恰好是1个元素,那么一切都会失败。显然,在这种情况下,这将返回单个值,因此Join()也会失败For Each __ in LINENAMES_ARRAY为什么不将其视为1x1数组而不是自由值?我已经开始通过重写调用此函数的功能来减轻该问题,检查它是否为数组,然后执行其他一些步骤。像:

For j = 1 To LINENAMES_COUNT
    LINES_BOX.AddItem lineNames(j)
Next j

更改为:

If Not IsArray(LINENAMES_ARRAY) Then
     myListBox.AddItem CStr(LINENAMES_ARRAY)
Else
    For j = 1 To LINENAMES_COUNT
       LINES_BOX.AddItem LINENAMES_ARRAY(j)
    Next j
End If

但是,这变得凌乱,并且在我的代码中添加了许多我希望在LINENAMES_ARRAY函数中处理的额外检查有没有办法返回1x1数组?或任何其他解决方法?

用户名

如果将数组创建为单个元素数组并以数组方式填充它,则该数组可以具有单个元素。

Option Explicit

Dim MAIN_HEAD_COUNT As Long
Dim LINENAMES_COUNT As Long
Dim MAIN_LINENAMES_COLUMN As Long
Dim MAIN As Worksheet

Sub stuff()
    Dim arr As Variant
    Set MAIN = Worksheets("Sheet1")
    MAIN_LINENAMES_COLUMN = 2
    MAIN_HEAD_COUNT = 2
    LINENAMES_COUNT = 2

    arr = LINENAMES_ARRAY()
    Debug.Print IsArray(arr)
    Debug.Print LBound(arr) & ":" & UBound(arr)
End Sub

Function LINENAMES_ARRAY() As Variant
    Dim a As Long, tmp() As Variant
    ReDim tmp(0 To LINENAMES_COUNT - MAIN_HEAD_COUNT)
    For a = 0 To LINENAMES_COUNT - MAIN_HEAD_COUNT
        tmp(a) = MAIN.Range(MAIN.Cells(MAIN_HEAD_COUNT + 1, MAIN_LINENAMES_COLUMN), _
                            MAIN.Cells(LINENAMES_COUNT + 1, MAIN_LINENAMES_COLUMN)).Cells(a).Value2
    Next a
    'returns an array of all items in the main sheet linenames column
    LINENAMES_ARRAY = tmp
End Function

VBE即时窗口的结果

True
0:0

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

数组函数仅返回第一个值

给定一个整数数组arr,当且仅当该数组中每个值的出现次数唯一时,编写一个返回true的函数

使用Youtube IFrame API时,getPlaylist返回仅包含一个视频的数组

matlab常量匿名函数仅返回一个值,而不是数组

使用“ apply”时,我可以仅返回一个函数的值吗?

在for循环中构造时仅返回数组的最后一个值

函数仅返回第一个值

当给定数百个数组时,Sklearn PCA仅返回一个值的数组

将不包含在一个数组中的值与另一个数组隔离

Absinthe 返回一个包含一个空值而不是空数组的数组

Javascript数组仅运行函数,该函数在数组的一个元素上返回promise

我在一个函数中有一个本地字符数组——当我返回数组名称时,为什么返回值是空的?

调用方法时从数组返回一个值

反应警告 预期在箭头函数数组-回调-返回结束时返回一个值

将数组写入范围。仅获取数组的第一个值

数组仅返回一个元素

仅返回列表的第一个输入但不继续输入的函数超出范围

用另一个包含超出范围的值的数组索引一个numpy数组

抓取仅返回一个值

Powershell 脚本仅返回 Excel 范围内的第一个值

一个函数有时返回一个值有时不返回一个值是一个好习惯吗

返回其下一个包含值范围的所有单元格

我该如何编写一个需要一个sequence的函数,并返回一个仅包含一个元素的映射的相同序列?

Python函数仅返回第一个值,而不返回数据框

当仅显式返回一个参数时,Powershell函数将返回所有参数

当调用仅返回一个对象时,如何强制Powershell返回数组?

git日志范围,但仅包含一个提交路径

AQL 包含用于多值属性仅返回第一个值

返回文档在字段中仅包含一个值