#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