Заменить существующие рабочие листы внешними файлами

Я нашел этот код 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

Итак, в начале процесса в вашей «основной» книге есть 24 листа (лист формул плюс QDS в QDS (23))? Следует ли сначала удалить все листы QDS перед выполнением любого импорта? Нужно ли переименовывать импортированные листы? Не слишком ясно, какова ваша точная желаемая конечная точка.

Tim Williams 26.10.2018 22:58

Что куда? Это не ясно

urdearboy 26.10.2018 22:58

Добро пожаловать в Stack Overflow. что ты уже испробовал? И есть ли у вас какие-то конкретные проблемы, которые, по вашему мнению, вы должны понять, но не можете понять? Этот форум имеет сильную культуру «работай и спрашивай, когда застрянешь». Посмотрите stackoverflow.com/help/how-to-ask, чтобы почувствовать это.

Instant Breakfast 26.10.2018 23:02

@TimWilliams Листы QDS НЕ следует удалять перед запуском любого импорта - они в настоящее время пусты, и я бы хотел, чтобы импортируемые внешние листы немедленно заменяли существующие листы и сохраняли те же имена листов. В противном случае я обнаружил, что если я удалю существующие листы, а затем импортирую внешние листы, все мои формулы с внешними ссылками на эти листы будут автоматически удалены. Я надеюсь, что это имеет смысл - я неопытен и даже не могу объяснить свой процесс. Извините, я очень стараюсь! Я работаю в некоммерческой организации и работаю над нашими процессами сбора данных.

Nicole Cantu 26.10.2018 23:09

@TimWilliams ты мой герой !!!! Это сработало отлично - я не могу вас отблагодарить !!!!! Большое спасибо!

Nicole Cantu 27.10.2018 21:32
Преобразование HTML-таблицы в профессиональный документ Excel
Преобразование HTML-таблицы в профессиональный документ Excel
Это самый простой способ создания Excel из HTML-таблицы.
Импорт excel в laravel в базу данных
Импорт excel в laravel в базу данных
Здравствуйте, дорогой читатель, в этой статье я расскажу практическим и быстрым способом, как импортировать файл Excel в вашу базу данных с помощью...
2
5
51
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Может, попробуем что-нибудь вроде этого:

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
'....
'....

Другие вопросы по теме