首页 > 解决方案 > 循环将数组打印到多个单元格,“对象 _Global 的范围失败”错误

问题描述

我正在读取目录中多个文件的名称。每个文件都有一个标题,其中包含五个破折号。我想将这些名称打印到已用破折号分隔的标题并放入单个单元格的工作表中。

例如,输入:
marie-loves-orange-tabby-cats-100
Shelby-hates-white-winged-moths-200

输出(其中线条代表细胞):
Marie | 爱 | 橙色 | 虎斑 | 猫 | 100
谢尔比 | 讨厌 | 白色 | 翅 | 飞蛾| 200

我还没有看到将单维数组打印到单元格的优雅方式(尽管我的方式也不是非常优雅),而且我能找到的示例并没有通过改变值循环。我尝试了一个简单的 A:E 作为范围,但这在整个单元格中打印了相同的文件名。为了解决这个问题,我制作了一个带有变量值的字符串作为范围,这样它只会在这些单元格中打印,然后在工作表中向下移动。A1:E1,然后 A2:E2,... 以此类推。

Dim vaArray   As Variant
    Dim i               As Integer
    Dim oFile       As Object
    Dim oFSO     As Object
    Dim oFolder  As Object
    Dim oFiles     As Object

    Set oFSO = CreateObject("Scripting.FileSystemObject")
    Set oFolder = oFSO.GetFolder(sPath)
    Set oFiles = oFolder.Files

    If oFiles.Count = 0 Then
        file_list = False
        Exit Function
    End If

    ReDim vaArray(1 To oFiles.Count)
    Dim afterSplit() As String
    Dim rangeString As String
    Worksheets("filenames").Activate
    i = 1
    For Each oFile In oFiles
        afterSplit = Split(oFile.Name, "-", 5)
        rangeString = "A" + Str(i) + ":" + "E" + Str(i)
        Range(rangeString).Value = afterSplit
        i = i + 1
    Next

但是,这会引发“对象'_Global'的消息'范围'失败”错误,而不会在工作表上打印任何内容。我很感激这方面的任何帮助。

编辑:为清楚起见,添加了较大的代码。

标签: arraysexcelvba

解决方案


Str文档中:

将数字转换为字符串时,始终为数字的符号保留前导空格。如果 number 为正数,则返回的字符串包含前导空格并隐含加号。

如果您Debug.Print "A" + Str(i) + ":" + "E" + Str(i)是 ,您将看到前导空格以及这是一个无效的范围引用:A 1:E 1而不是A1:E1.

用于&连接,并Str完全避免。

"A" & i & ":E" & i

推荐阅读