У меня есть подпрограмма VBA для копирования выбранных ячеек из нескольких рабочих книг в один мастер-файл. Но есть проблема в том, что есть вероятность, что одна или несколько исходных (входных) рабочих книг будут содержать пустые ячейки. Таким образом, когда данные из последующих входов копируются, вместо того, чтобы находиться в той же строке, они будут перемещаться вверх, чтобы заполнить весь пустой столбец. Извините, если мои слова не ясны; Английский не мой родной язык. Я приложил пример здесь:
вход
B3 B4 B5 B6 C9
book1 bb 1234 cc
book2 ff 3242 ff
book3 fjn 7643 jk fjnnD fjnnE
book4 gwd 9754 jk gjwdD gjwdE
Ожидаемый результат (в основном файле)
A B C D E
Row 1 bb 1234 cc
Row 2 ff 3242 ff
Row 3 fjn 7643 jk fjnnD fjnnE
Row 4 gwd 9754 jk gjwdD gjwdE
Результат, который я получаю
A B C D E
Row 1 bb 1234 cc fjnnD fjnnE
Row 2 ff 3242 ff gjwdD gjwdE
Row 3 fjn 7643 jk
Row 4 gwd 9754 jk
Вот мой код
Включает логику для сканирования каталога на наличие входных файлов.
Это работает правильно, так что вы можете игнорировать это.
Проблема заключается в коде для копирования данных из одной выбранной (открытой) рабочей книги на лист « Основной список» в активной рабочей книге (SummWb
).
Sub UploadData()
Dim SummWb As Workbook
Dim SceWb As Workbook
'Get folder containing files
With Application.FileDialog(msoFileDialogFolderPicker)
.AllowMultiSelect = False
.Show
On Error GoTo Error_handler
myFolderName = .SelectedItems(1)
'Err.Clear
'On Error GoTo 0
End With
If Right(myFolderName, 1) <> "\" Then myFolderName = myFolderName & "\"
'Settings
Application.ScreenUpdating = False
oldStatusBar = Application.DisplayStatusBar
Application.DisplayStatusBar = True
Set SummWb = ActiveWorkbook
'Get source files and append to output file
mySceFileName = Dir(myFolderName & "*.*")
Do While mySceFileName <> "" 'Stop once all files found
Application.StatusBar = "Processing: " & mySceFileName
Set SceWb = Workbooks.Open(myFolderName & mySceFileName) 'Open file found
With SummWb.Sheets("Master List")
.Cells(.Rows.Count, "A").End(xlUp).Offset(1, 0).Value = SceWb.Sheets("Survey").Range("B3").Value
.Cells(.Rows.Count, "C").End(xlUp).Offset(1, 0).Value = SceWb.Sheets("Survey").Range("B4").Value
.Cells(.Rows.Count, "D").End(xlUp).Offset(1, 0).Value = SceWb.Sheets("Survey").Range("B5").Value
.Cells(.Rows.Count, "E").End(xlUp).Offset(1, 0).Value = SceWb.Sheets("Survey").Range("B6").Value
.Cells(.Rows.Count, "I").End(xlUp).Offset(1, 0).Value = SceWb.Sheets("Survey").Range("C9").Value
.Cells(.Rows.Count, "J").End(xlUp).Offset(1, 0).Value = SceWb.Sheets("Survey").Range("D9").Value
.Cells(.Rows.Count, "K").End(xlUp).Offset(1, 0).Value = SceWb.Sheets("Survey").Range("C10").Value
.Cells(.Rows.Count, "L").End(xlUp).Offset(1, 0).Value = SceWb.Sheets("Survey").Range("D10").Value
.Cells(.Rows.Count, "M").End(xlUp).Offset(1, 0).Value = SceWb.Sheets("Survey").Range("C11").Value
.Cells(.Rows.Count, "N").End(xlUp).Offset(1, 0).Value = SceWb.Sheets("Survey").Range("D11").Value
.Cells(.Rows.Count, "F").End(xlUp).Offset(1, 0).Value = SummWb.Sheets("Upload Survey").Range("C8").Value
End With
SceWb.Close (False) 'Close Workbook
mySceFileName = Dir
Loop
MsgBox ("Upload complete.")
'Settings and save output file
Application.StatusBar = False
Application.DisplayStatusBar = oldStatusBar
SummWb.Activate
SummWb.Save 'save automaticallly
Application.ScreenUpdating = True
Exit Sub
Error_handler:
MsgBox ("You cancelled the action.")
End Sub
Я предполагаю, что проблема с кодом End(xlUp)
. Любая помощь очень ценится.