У меня есть код ниже.Excel - Открытые книги с названиями
Просто попросите пользователя выбрать несколько книг excel, а затем скопировать и вставить данные из этих книг в текущую рабочую книгу.
1. Я хотел бы добавить функциональность, вместо этого, вместо того, чтобы выбирать книги Excel. Прежние книги будут выбраны так, чтобы их имена были указаны на текущем листе excel.
Например - Выберите книги Excel в указанной папке, имена которых указаны в A1: A5.
- Я хотел бы выполнить автоматическую обработку данных до того, как он будет скопирован в текущую рабочую книгу.
Например, если имя рабочей книги = 100.xlsx затем умножить на выбор 15.
См мой текущий код
Sub SUM_BalanceSheet()
Application.ScreenUpdating = False
'FileNames is array of file names, file is for loop, wb is for the open file within loop
'PasteSheet is the sheet where we'll paste all this information
'lastCol will find the last column of PasteSheet, where we want to paste our values
Dim FileNames
Dim file
Dim wb As Workbook
Dim PasteSheet As Worksheet
Dim lastCol As Long
Set PasteSheet = ActiveSheet
lastCol = PasteSheet.Cells(1, Columns.Count).End(xlToLeft).Column
'Build the array of FileNames to pull data from
FileNames = Application.GetOpenFilename(filefilter:="Excel Files (*.xlsx), *.xlsx", MultiSelect:=True)
'If user clicks cancel, exit sub rather than throw an error
If Not IsArray(FileNames) Then Exit Sub
'Loop through selected files, put file name in row 1, paste P18:P22 as values
'below each file's filename. Paste in successive columns
For Each file In FileNames
Set wb = Workbooks.Open(file, UpdateLinks:=0)
PasteSheet.Cells(1, lastCol + 1) = wb.Name
wb.Sheets("Page 1").Range("L14:L98").Copy
PasteSheet.Cells(2, lastCol + 1).PasteSpecial Paste:=xlPasteValues
wb.Close SaveChanges:=False
lastCol = lastCol + 1
Next
'If it was a blank sheet then data will start pasting in column B, and we don't
'want a blank column A, so delete it if it's blank
If Cells(1, 1) = "" Then Cells(1, 1).EntireColumn.Delete shift:=xlLeft
Application.CutCopyMode = False
Application.ScreenUpdating = True
End Sub
Thanks Eugene, как бы я использовал несколько диапазонов? – RalphDylan
@RalphDylan Существует много способов, вы можете перебирать каждую ячейку в целевом диапазоне и назначать новое значение 'rng.Value = rng.Value * Factor', или вы можете поместить коэффициент в некоторую временную ячейку на листе (' Set rngFactor = SomeSheet.Cells (1,1) .Value'), скопируйте его и вставьте в целевой диапазон как значение для умножения: 'rngTarget.PasteSpecial Paste: = xlPasteValues, Operation: = xlMultiply, SkipBlanks: = False, Transpose : = false' – Eugene