【问题标题】:Array one dimensional. Why does split work and not Array()一维数组。为什么拆分工作而不是 Array()
【发布时间】:2014-08-20 15:31:06
【问题描述】:

有一个简单的问题。 VBA 中的 Array() 函数是否返回二维数组?我正在尝试使用此函数创建一个一维数组并在 filter() 函数中使用它,但它显示“类型不匹配”。如果是这种情况,我该如何强制 Array() 创建一维数组?

Sub tester()
    Dim xWorkb As Excel.Workbook
    Dim xFiles_target() As String
    Dim file_path As String

    xFiles_target = Array("Bella.xls", "Fizz.xls", "Milo.xls")

    file_path = Dir("C:\Users\hans\Desktop\")

    Do While Len(file_path) > 0
        Debug.Print file_path
        If UBound(Filter(xFiles_target, file_path)) >= 0 Then
            Debug.Print "found " & file_path
        End If
        file_path = Dir
    Loop
End Sub

【问题讨论】:

  • Array 返回一维数组。你用的是什么代码?
  • 然后查看@paulfrancis 的答案 - 这是因为您将xFiles_target() 声明为字符串
  • 是的 - 你不能像这样将一组值与单个值进行比较。
  • @uncool - 因为过滤器永远不会为真。过滤器函数将与数组中的元素进行比较。该数组由值组成(只是文件名的值)。 Bella.xls,其中 file_path 包含更多内容。因此,如果我的理解是正确的,您必须在文件名之前包含文件路径。或者你必须从文件路径中去掉文件名,然后与数组进行比较。
  • file_path 中的 Dir() 将返回 \desktop\ 目录中的任何下一个文件。当找到 bella.xls 时,这只会说字符串 Bella.xls (没有别的)。根据我的理解,使用 desktop\ 相当于使用 desktop\"" 迭代目录中的所有文件。

标签: vba excel


【解决方案1】:

Array 函数确实会创建一维数组。但是,该函数要求您分配给的变量是 Variant 类型。它不能是字符串/数字。

Dim tmpArr() As String
tmpArr = Array("Hello", "World")

上面很可能会抛出类型不匹配错误。然而,

Dim tmpArr()
tmpArr = Array("Hello", "World")

上面会这样认为。这不会引发错误,但 tmpArray 现在有两个元素。

Split 函数将产生一个 String 数组。虽然 Variant 类型可以接受 String,但 Number 数组不能接受 Split 函数。

更多关于这方面的信息整齐地组织在这里:http://patorjk.com/programming/tutorials/vbarrays.htm

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 2012-09-29
    • 1970-01-01
    • 2021-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多