Копирование всей информации на листах в новый

#excel #vba #copy

Вопрос:

Что я хочу сделать, так это скопировать всю информацию на всех без исключения листах в новую книгу, также созданную vba, с точными именами листов. *причина в том, что через некоторое время excel выдает ошибку при сохранении файла. «Файл не был сохранен». Поэтому я хочу получить информацию

 Dim ws As Worksheet, wb As Workbook
Set wb =Workbooks.Add("NewOne.xlsb")
For each ws in ThisWorkbook.Worksheets
name = ThisWorkbook.Sheets.Name
ThisWorkbook.Sheets.Copy wb.Sheets.Add(Name:=name).Paste
Next
 

Комментарии:

1. Это может быть как ThisWorkbook.ws.Name чтобы переименовать новый лист в новой книге с точно таким же именем

2. Вероятно, вы слишком усложняете ситуацию. Просто используйте ws.Copy (нет Paste , нет wb.Sheets.Add , нет Set wb = Workbooks.Add) ), который создает новую рабочую книгу с копией листа. Затем обратитесь к ActiveWorkbook .

3. @BigBen пока неясно. Как это может быть. Скопируйте создайте новую книгу. Активная рабочая книга — excel поймет, что создана новая рабочая книга. Существует множество рабочих листов…

4. Из Worksheet.Copy документов: Если вы не указали ни До, ни после, Microsoft Excel создаст новую книгу, содержащую скопированный объект рабочего листа. Во вновь созданной рабочей книге содержится приложение. Свойство ActiveWorkbook и содержит один рабочий лист. На одном листе сохраняются свойства Имени и кодового имени исходного листа.

5. Но разве это не создаст столько же рабочих книг, сколько листов в старой рабочей книге…?

Ответ №1:

Простое решение заключается в использовании Worksheets.Copy (без добавления новой книги, без вставки).

Из документов:

Если вы не укажете ни До, ни после, Microsoft Excel создаст новую книгу, содержащую скопированный лист.

 ThisWorkbook.Worksheets.Copy
' Do something with the ActiveWorkbook...
 

Комментарии:

1. Но знаете ли вы причину, по которой excel иногда не сохраняет книгу??

2. Я не уверен, что без доступа к рабочей книге или к вашему компьютеру.

3. Очень мило! Я не знал этого метода… Я думал, что это работает только для листа. Я использовал его при сохранении в формате pdf. Я попробовал это в своей рабочей тетради по тестированию, и она сломалась. Я думал, что это вопрос защиты простыней, но это не так. Я протестировал другую книгу меньшего размера с защищенными листами, и они копируются, сохраняя свою защиту. Я проанализирую сокрушительную причину. В любом случае, в рабочей книге 233 листа, и, возможно, может существовать число листов. Проголосовали за!

4. @user16316847 Я заметил, что листы копируются с включенным модулем кода, и, возможно, в таком коде события что-то не так. Возможно, он вызывает несуществующий Sub модуль из несуществующего модуля, и, возможно, Excel обнаруживает несоответствия с этой точки зрения. Вам нужны коды для обсуждения? Если нет, вы можете написать фрагмент кода, чтобы удалить их после копирования.

5. @FaneDuru, они мне нужны. Сегодня я столкнулся с другой проблемой, как вы описали здесь. Раздавленная книга Excel с макросом и защищенным листом. Я попробовал Учебник. Затем снимите защиту с ws.copy, но он даже не распознал, что книга Excel открыта… Знаете ли вы какой-либо другой способ восстановить поврежденные файлы Excel? Я попытался открыть с помощью и восстановить, а также попытался скопировать их с помощью vba, как описано, он даже не видит книгу Excel.

Ответ №2:

Пожалуйста, попробуйте следующий способ:

 Sub copySheets()
  Dim ws As Worksheet, wb As Workbook
  Set wb = Workbooks.Add(xlWBATWorksheet) 'add a workbook with only one sheet
  For Each ws In ThisWorkbook.Worksheets
    ws.Copy After:=wb.Sheets(wb.Sheets.count)
 Next
 wb.Sheets(1).delete 'the first existing (empty) sheet
 wb.saveAs FileName:="the workbook full name you need", FileFormat:=xlOpenXMLWorkbookMacroEnabled
End Sub