Цикл для вывода массива на несколько ячеек, ошибка «range of _Global failed» - PullRequest
0 голосов
/ 22 мая 2019

Я читаю имена нескольких файлов в каталоге. Каждый файл имеет заголовок с пятью тире. Я хотел бы напечатать эти имена на листе с заголовками, уже разделенными тире и помещенными в отдельные ячейки.

Например, введите:
мари-любит-оранжевый-табби кошки-100
шелби ненавидит белых крылатых мотыльков-200

Вывод (где строки представляют ячейки):
Мари | любит | апельсин | табби | кошки | 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» failed »без печати чего-либо на листе. Я ценю любую помощь с этим.

Редактировать: Добавлен увеличенный код для ясности.

1 Ответ

0 голосов
/ 22 мая 2019

Из документации Str:

Когда числа преобразуются в строки, для знака числа всегда резервируется начальный пробел.Если число положительное, возвращаемая строка содержит начальный пробел и подразумевается знак плюс.

Если вы Debug.Print "A" + Str(i) + ":" + "E" + Str(i), вы увидите начальный пробел и то, как это недопустимая ссылка на диапазон:A 1:E 1 вместо A1:E1.

Используйте & для объединения и избегайте Str полностью.

"A" & i & ":E" & i
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...