#excel #vba
Вопрос:
Цикл в папке-это работа, но не работают ячейки цикла, не работают копирование и вставка выбранных данных из 50 книг Excel в одну целевую книгу Excel. Я работаю в операционной системе Windows. У меня есть папка с 50 файлами Excel. У меня есть один файл destiny Excel. Данные передаются из папки в 1 отдельный файл Excel.
Помогите, пожалуйста.
Sub Combine()
Dim s As String, MyFiles As String
Dim endd As Integer, startt As Integer
Dim NewWb As Workbook
Dim newS As Worksheet
Dim i As Long
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set NewWb = Workbooks.Add
With NewWb
Set newS = NewWb.Worksheets("Лист1")
End With
endd = i * 10 1
startt = endd - 10
MyFiles = "C:UsersUserDesktopNezavisimaiPapka2"
s = Dir(MyFiles amp; "*.xlsx")
Do While s <> ""
[a1] = 0
If Dir = "" Then Exit Sub Else i = 1
Do
If Dir = "" Then Exit Do Else i = i 1
Loop Until False
[a1] = i
With Workbooks.Open(MyFiles amp; s)
.Worksheets("Данные").Range("A1:C10").Copy
.Close SaveChanges:=False
End With
newS.Select
With newS
.Range("B" amp; startt amp; ":D" amp; endd).Paste
End With
s = Dir
Loop
Application.DisplayAlerts = True
Application.ScreenUpdating = True
End Sub
Комментарии:
1. Вопросы с кодом, выполняющим это, существуют здесь.
2. Я замечаю, что вы всегда вставляете, итерация за итерацией, в один и тот же точный диапазон
newS
. Возможно, вам нужно увеличить диапазон, в который вы вставляете, чтобы он не перезаписывал один и тот же целевой диапазон снова и снова? После вставки попробуйтеstartt = startt 10
3. JNevill, метод Copy Paste не работает на первой итерации. Только добавьте книгу и откройте первую книгу. После вставки в теории: endd = i * 10 1 startt = endd — 10
4. Солнечный Майк, где вопросы с кодом? Я не нахожу. Я нахожу это в AutoIt. Но я не могу установить файл AutoIt .exe на свой компьютер в офисе. Корпорация запретила установку программного обеспечения (.exe)
5. Ну, у меня здесь есть один, и я получил несколько ответов от хороших людей здесь.
Ответ №1:
Option Explicit
Sub Combine()
Const FOLDER = "C:UsersUserDesktopNezavisimaiPapka2"
Dim wb As Workbook, wbNew As Workbook, wsNew As Worksheet
Dim filename As String, i As Long, n As Integer, rng As Range
Set wbNew = Workbooks.Add(xlWBATWorksheet) '1 sheet
Set wsNew = wbNew.Sheets(1)
Application.ScreenUpdating = False
i = 1
filename = Dir(FOLDER amp; "*.xlsx")
Do While filename <> ""
' open book and copy range
Set wb = Workbooks.Open(FOLDER amp; filename, False, True) ' no link update, read only
Set rng = wb.Sheets(1).Range("A1:C10")
rng.Copy wsNew.Range("B" amp; i)
i = i rng.Rows.Count
' close book goto next
wb.Close False
n = n 1
filename = Dir
Loop
' save combined
wbNew.SaveAs ThisWorkbook.Path amp; "Combined.xlsx"
wbNew.Close False
Application.ScreenUpdating = True
MsgBox n amp; " files copied", vbInformation
End Sub