VBA 定义一个简单的静态公共数组

Posted

技术标签:

【中文标题】VBA 定义一个简单的静态公共数组【英文标题】:VBA Define a simple static public array 【发布时间】:2018-02-27 10:12:37 【问题描述】:

我正在尝试完成这个明显简单的事情,但不知何故 VBA 一直在为我提供奇怪的错误。 我想要一个名为样式的全局数组,其中包含以下字符串:设置、标题、评论和直接复制。 在代码中:

Public styles(4) As String

直接分配数组对我不起作用,所以我通过 sub 做到了这一点:

sub Populate()
  styles(0) = "Settings"
  styles(1) = "Titles"
  styles(2) = "Comment"
  styles(3) = "Direct Copy"
  Debug.Print styles
End Sub

但是这不起作用,因为它给出了编译错误: debug.print 行上的类型不匹配... 预期结果类似于: (“设置”、“标题”、..)等任何编程语言都会返回。

那么如何在 VBA Excel 中获取包含字符串的公共数组,以便我可以在同一个模块中跨函数和子程序使用它们?

【问题讨论】:

试试Debug.Print styles(0)...Debug.Print styles(1)....Debug.Print styles(2)....Debug.Print styles(3)..... 这个答案对我不起作用,它看起来确实很优雅:***.com/questions/1654281/vba-public-array-how-to 【参考方案1】:

试试这种形式的公共声明和数组元素赋值。

Option Explicit

Public styles As Variant

Sub printStyles()

    styles = Array("Settings", "Titles", "Comment", "Direct Copy")

    Debug.Print LBound(styles) & "to" & UBound(styles)

    Dim i As Long
    For i = LBound(styles) To UBound(styles)
        Debug.Print styles(i)
    Next i

    Debug.Print Join(styles, ", ")

End Sub

顺便说一句,如果您继续使用保留字作为公共和私有变量的名称,您可能难以使用保留的 Styles Object。

【讨论】:

像魅力一样工作!感谢您提供额外的解释性代码!【参考方案2】:

这是如何打印数组(两次):

Public styles(4) As String

Sub Populate()
    styles(0) = "Settings"
    styles(1) = "Titles"
    styles(2) = "Comment"
    styles(3) = "Direct Copy"

    '1. print is here ---v
    Dim cnt As Long
    For cnt = LBound(styles) To UBound(styles)
        Debug.Print styles(cnt)
    Next cnt
    '--------------------^        
    '2. print is here ---v
    Debug.Print Join(styles, vbCrLf)
    '--------------------^
End Sub

这是你得到的(两次):

Settings
Titles
Comment
Direct Copy

第一次循环遍历元素并在新行上打印每个元素。 第二次返回通过连接数组中包含的多个子字符串创建的字符串。

Join MSDN Reference

【讨论】:

有没有办法像在 python 或 java 中那样声明一个公共数组:array = ("value1", "value2", etc..) 数组的最终目的是验证excel的样式,如果在数组中则需要写入txt文件 我不知道 OP 是否期望有第五个数组元素,但 styles(4) 为从零开始的数组留下 5 个元素。 @Brilsmurfffje - 它应该在一个过程中(在一个子或函数内)。 @Brilsmurfffje - 这是因为您在 sub 中没有 Dim Styles As Variant,但您在 sub 外部使用 Public styles(4) As String。在外面写Public styles As Variant 或在里面写Dim Styles As Variant

以上是关于VBA 定义一个简单的静态公共数组的主要内容,如果未能解决你的问题,请参考以下文章

从用户窗体 vba 加载的公共数组

VBA 从用户窗体更新公共数组

在 VBA 中使用数组复制和粘贴

Excel VBA - 下标超出一维数组的范围

用于存储简单数据的“公共静态”和“私有静态”之间的区别。啥是更好的? [复制]

关于VB数组的一个简单问题