VBA Collection извлекает данные, но не показывает значения - PullRequest
0 голосов
/ 23 октября 2018

Мой вопрос касается коллекций.

В этом коде я открываю друг друга Excel в папке моего текущего Excel и извлекаю все его данные для первого столбца в коллекцию.

Затем я пытаюсь вставить собранные значения в мой текущий файл.

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

Я использовал форму «Sheet.cells.value = coll (i)» раньше и работал отлично, но в этом случае это не так.

Появляется ошибка 1004 - 'Ошибка времени выполнения' 1004 ': ошибка приложения или объекта' в этой строке.

У вас есть какие-либо идеи относительно того, почему?Любая рекомендация?

Спасибо!

Option Explicit
Sub LoopThroughFolder()
Application.ScreenUpdating = False

'State variables
Dim Path As String          'path of folder
Dim DataBase As String      ' current excel file
Dim ERow As Long            'last row of current excel file
Dim coll As New Collection  'collection of data
Dim iRow As Long            'rows of other excel files
Dim n As Long               'total records of other excel files
Dim i As Integer


'Name of files to open
Path = Dir(ActiveWorkbook.Path & "\")
DataBase = ActiveWorkbook.Name

'For each file
Do While Path <> DataBase

        'Open, retrieve data, close
        Workbooks.Open (ActiveWorkbook.Path & "\" & Path)
        n = Application.WorksheetFunction.CountA(Range("A:A"))
            For iRow = 2 To n
            coll.Add Cells(iRow, 1)
            Next iRow
        ActiveWorkbook.Close

    'Next file
    Path = Dir
    Loop

'Now place the values in my current excel file (here is the problem)(?)
ERow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
    For i = 1 To coll.Count
    ActiveSheet.Cells(ERow + i, 1).Value = coll(i)
    Next i

'End
Set coll = Nothing
Application.ScreenUpdating = True
End Sub

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Пожалуйста, измените coll.Add Cells(iRow, 1) на coll.Add Cells(iRow, 1).Value, и он начнет работать.

далее, в первом выражении dir лучше указать какой-нибудь подстановочный знак, например 'Path = Dir(ActiveWorkbook.Path & "\*.xlsx")'

ТакжеDo While Path <> DataBase может привести к прекращению цикла при обнаружении базы данных.Лучше сделать это как

   Do While Path <> ""
        If Path <> DataBase Then
        '''''''''''''''  
        '''''''''''''' 
        End If
    Path = Dir
    Loop
0 голосов
/ 23 октября 2018

Заменить:

 ActiveSheet.Cells(ERow + i, 1).Value = coll(i)

на:

 ActiveSheet.Cells(ERow + i, 1).Value = coll.Item(i)

(могут быть другие проблемы)

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