В настоящее время я использую фрагмент кода для циклического просмотра файлов в папке и копирования определенных ячеек из каждого файла в основной список.Есть несколько файлов, которые добавляются в папку каждую неделю.Один из столбцов в основном списке содержит имена ранее зацикленных файлов.Код перебирает только те файлы, которые не включены в список имен файлов и, следовательно, ранее не были зациклены.
Код работает очень хорошо и копирует ячейки с удовлетворительными результатами, однако теперь мне нужно изменить его, чтобы также копироватьдиапазон данных (особенно A20:H33
), а также удовлетворение вышеуказанному условию отсутствия зацикливания.
Я безуспешно пытался выполнить следующее:
- Добавление еще одного
varTemp
к коду (как видно из основного кода) - Добавление подпрограммы, которая может копировать диапазон (однако я не смог включить это в код, чтобы оно удовлетворяло условию без зацикливания)
- Используя selection.copy и selection.paste, однако появляется ошибка, которую я не могу обойти («Объект не поддерживает это свойство или метод»)
Вот основной код:
Option Explicit
Sub CopyFromFolderExample()
Dim ws As Worksheet: Set ws = ThisWorkbook.Sheets(1)
Dim strFolder As String, strFile As String, r As Long, wb As Workbook
Dim varTemp(1 To 6) As Variant
Application.ScreenUpdating = False
strFolder = "D:\Other\folder\"
r = ws.Range("A" & ws.Rows.Count).End(xlUp).Row
strFile = Dir(strFolder & "*.xl*")
Do While Len(strFile) > 0
If Not Looped(strFile, ws) Then
Application.StatusBar = "Reading data from " & strFile & "..."
Set wb = Workbooks.Add(strFolder & strFile)
With wb.Worksheets(1)
varTemp(1) = strFile
varTemp(2) = .Range("A13").Value
varTemp(3) = .Range("H8").Value
varTemp(4) = .Range("H9").Value
varTemp(5) = .Range("H37").Value
'varTemp(6) = .Range("A20:H33").Value
End With
wb.Close False
r = r + 1
ws.Range(ws.Cells(r, 1), ws.Cells(r, 6)).Formula = varTemp
End If
strFile = Dir
Loop
Application.StatusBar = False
Application.ScreenUpdating = True
End Sub
Private Function Looped(strFile As String, ws As Worksheet) As Boolean
Dim Found As Range
Set Found = ws.Range("A:A").Find(strFile)
If Found Is Nothing Then
Looped = False
Else
Looped = True
End If
End Function
Это фрагмент кода, который при вставке в основной код чуть ниже последнего vartemp
дает мне следующую ошибкуr («Объект не поддерживает это свойство или метод»)
.Range("A20:H33").Select
.Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
ws.Activate
If ws.Range("A1") = "" Then
ws.Range("A1").Select
Selection.Paste
Else
Selection.End(xlDown).Offset(6, 0).Select
Selection.Paste
End If
Вот что я пытаюсь достичь: 