Я нашел этот код VBA в Интернете для извлечения данных из нескольких внешних книг Excel в одну книгу, каждая на своем новом листе.
Вместо этого мне нужно заменить существующие рабочие листы с пометками «QDS», «QDS (2)», «QDS (3)» и так далее до «QDS (23)» (только не заменяйте первый рабочий лист, который где все мои формулы).
Sub MergeExcelFiles()
Dim fnameList, fnameCurFile As Variant
Dim countFiles, countSheets As Integer
Dim wksCurSheet As Worksheet
Dim wbkCurBook, wbkSrcBook As Workbook
fnameList = Application.GetOpenFilename(FileFilter: = "Microsoft Excel Workbooks (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm", Title: = "Choose Excel files to merge", MultiSelect:=True)
If (vbBoolean <> VarType(fnameList)) Then
If (UBound(fnameList) > 0) Then
countFiles = 0
countSheets = 0
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Set wbkCurBook = ActiveWorkbook
For Each fnameCurFile In fnameList
countFiles = countFiles + 1
Set wbkSrcBook = Workbooks.Open(Filename:=fnameCurFile)
For Each wksCurSheet In wbkSrcBook.Sheets
countSheets = countSheets + 1
wksCurSheet.Copy after:=wbkCurBook.Sheets(wbkCurBook.Sheets.Count)
Next
wbkSrcBook.Close SaveChanges:=False
Next
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
MsgBox "Processed " & countFiles & " files" & vbCrLf & "Merged " & countSheets & " worksheets", Title: = "Merge Excel files"
End If
Else
MsgBox "No files selected", Title: = "Merge Excel files"
End If
End Sub
Что куда? Это не ясно
Добро пожаловать в Stack Overflow. что ты уже испробовал? И есть ли у вас какие-то конкретные проблемы, которые, по вашему мнению, вы должны понять, но не можете понять? Этот форум имеет сильную культуру «работай и спрашивай, когда застрянешь». Посмотрите stackoverflow.com/help/how-to-ask, чтобы почувствовать это.
@TimWilliams Листы QDS НЕ следует удалять перед запуском любого импорта - они в настоящее время пусты, и я бы хотел, чтобы импортируемые внешние листы немедленно заменяли существующие листы и сохраняли те же имена листов. В противном случае я обнаружил, что если я удалю существующие листы, а затем импортирую внешние листы, все мои формулы с внешними ссылками на эти листы будут автоматически удалены. Я надеюсь, что это имеет смысл - я неопытен и даже не могу объяснить свой процесс. Извините, я очень стараюсь! Я работаю в некоммерческой организации и работаю над нашими процессами сбора данных.
@TimWilliams ты мой герой !!!! Это сработало отлично - я не могу вас отблагодарить !!!!! Большое спасибо!
Может, попробуем что-нибудь вроде этого:
Dim done As Boolean
'....
'....
For Each fnameCurFile In fnameList
countFiles = countFiles + 1
Set wbkSrcBook = Workbooks.Open(Filename:=fnameCurFile)
For Each wksCurSheet In wbkSrcBook.Sheets
countSheets = countSheets + 1
'check have somewhere to paste the content...
If countSheets > 23 Then
MsgBox "Reached max. sheet count of 23!", vbExclamation
done = True
Exit For
End If
'copy the sheet content, not the actual sheet....
' skip the formulas sheet
wksCurSheet.UsedRange.Copy ThisWorkbook.Sheets(countSheets + 1).Range("A1")
Next
wbkSrcBook.Close SaveChanges:=False
If done Then Exit For
Next
'....
'....
Итак, в начале процесса в вашей «основной» книге есть 24 листа (лист формул плюс QDS в QDS (23))? Следует ли сначала удалить все листы QDS перед выполнением любого импорта? Нужно ли переименовывать импортированные листы? Не слишком ясно, какова ваша точная желаемая конечная точка.