Данный макрос осуществляет чистку свойств файла Excel (автор, кем сохранен, организация и т.д.). Но есть проблема, при сохранении в другом формате, например из xls в xlsx, возникает ошибка, т.к. данные для сохранения берутся не из диалогового окна. Как сделать, чтобы при сохранении файла из xls в xlsx и наоборот все было корректно? Заранее спасибо!
[vba]
Код
Dim FileName, nMode
Application.ScreenUpdating = False With ActiveWorkbook '.RemoveDocumentInformation xlRDIVersions .RemoveDocumentInformation xlRDIRemovePersonalInformation .RemoveDocumentInformation xlRDIEmailHeader .RemoveDocumentInformation xlRDIRoutingSlip .RemoveDocumentInformation xlRDISendForReview .RemoveDocumentInformation xlRDIDocumentProperties '.RemoveDocumentInformation xlRDITemplate '.RemoveDocumentInformation xlRDIInkAnnotations .RemoveDocumentInformation xlRDIDocumentServerProperties .RemoveDocumentInformation xlRDIDocumentManagementPolicy .RemoveDocumentInformation xlRDIContentType .RemoveDocumentInformation xlRDIAll End With ' save as Set fd = Application.FileDialog(msoFileDialogSaveAs) With fd If .Show Then FileName = .SelectedItems(1) if ActiveWorkbook.FileFormat = 51 Then nMode = xlOpenXMLWorkbook else nMode = xlWorkbookNormal end if ActiveWorkbook.SaveAs FileName, nMode End If End With Set fd = Nothing Application.ScreenUpdating = True
[/vba] [moder]Для оформления кода используйте теги (кнопка #). Исправила на первый раз[/moder]
Добрый день!
Данный макрос осуществляет чистку свойств файла Excel (автор, кем сохранен, организация и т.д.). Но есть проблема, при сохранении в другом формате, например из xls в xlsx, возникает ошибка, т.к. данные для сохранения берутся не из диалогового окна. Как сделать, чтобы при сохранении файла из xls в xlsx и наоборот все было корректно? Заранее спасибо!
[vba]
Код
Dim FileName, nMode
Application.ScreenUpdating = False With ActiveWorkbook '.RemoveDocumentInformation xlRDIVersions .RemoveDocumentInformation xlRDIRemovePersonalInformation .RemoveDocumentInformation xlRDIEmailHeader .RemoveDocumentInformation xlRDIRoutingSlip .RemoveDocumentInformation xlRDISendForReview .RemoveDocumentInformation xlRDIDocumentProperties '.RemoveDocumentInformation xlRDITemplate '.RemoveDocumentInformation xlRDIInkAnnotations .RemoveDocumentInformation xlRDIDocumentServerProperties .RemoveDocumentInformation xlRDIDocumentManagementPolicy .RemoveDocumentInformation xlRDIContentType .RemoveDocumentInformation xlRDIAll End With ' save as Set fd = Application.FileDialog(msoFileDialogSaveAs) With fd If .Show Then FileName = .SelectedItems(1) if ActiveWorkbook.FileFormat = 51 Then nMode = xlOpenXMLWorkbook else nMode = xlWorkbookNormal end if ActiveWorkbook.SaveAs FileName, nMode End If End With Set fd = Nothing Application.ScreenUpdating = True
[/vba] [moder]Для оформления кода используйте теги (кнопка #). Исправила на первый раз[/moder]Rash
Сообщение отредактировал Pelena - Среда, 19.08.2015, 14:03
Дык, все правильно Вы же в диалоге выбираете формат .xlsx, соответственно и расширение файла в .SelectedItems(1) у вас тоже .xlsx, а затем в .SaveAs сохраняете его в формате xlExcel8. В результате, файл сохраняется с расширением .xlsx, но в формате Excel 2003, поэтому при открытии такого .xlsx и возникает ошибка, т.к. видя расширение .xlsx Excel пытается получить структуру BIFF12, а получает BIFF8 Чтобы сохранять файл в формате, выбранном в диалоге, замените свой код на: [vba]
Код
Sub SaveAs1() ActiveWorkbook.RemoveDocumentInformation xlRDIAll ' save as With Application.FileDialog(msoFileDialogSaveAs) If .Show Then .Execute End With End Sub
[/vba]
UPD Просто, не понятно, что вы хотите получить в конечном итоге?... Если вам нужно разрешить пользователям сохранять файл только в формате .xls или .xlsx, то можно так: [vba]
Код
Sub SaveAs2() Dim FileName As String, FileFormat As XlFileFormat ActiveWorkbook.RemoveDocumentInformation xlRDIAll ' save as With Application.FileDialog(msoFileDialogSaveAs) .InitialFileName = ActiveWorkbook.Name ' имя файла в диалоге .FilterIndex = 4 ' тип файла в диалоге If .Show Then FileName = .SelectedItems(1) If .FilterIndex <> 4 Then ' меняем расширение и тип файла на тот, который хотим использовать по умолчанию (игнорируя тип, выбранный пользователем в диалоге) FileName = Left$(FileName, InStrRev(FileName, ".")) & "xlsx" FileFormat = xlWorkbookDefault Else FileFormat = xlExcel8 ' пользователь в диалоге казал тип Office 2003 (разрешенный) End If ActiveWorkbook.SaveAs FileName, FileFormat End If End With End Sub
[/vba]
Дык, все правильно Вы же в диалоге выбираете формат .xlsx, соответственно и расширение файла в .SelectedItems(1) у вас тоже .xlsx, а затем в .SaveAs сохраняете его в формате xlExcel8. В результате, файл сохраняется с расширением .xlsx, но в формате Excel 2003, поэтому при открытии такого .xlsx и возникает ошибка, т.к. видя расширение .xlsx Excel пытается получить структуру BIFF12, а получает BIFF8 Чтобы сохранять файл в формате, выбранном в диалоге, замените свой код на: [vba]
Код
Sub SaveAs1() ActiveWorkbook.RemoveDocumentInformation xlRDIAll ' save as With Application.FileDialog(msoFileDialogSaveAs) If .Show Then .Execute End With End Sub
[/vba]
UPD Просто, не понятно, что вы хотите получить в конечном итоге?... Если вам нужно разрешить пользователям сохранять файл только в формате .xls или .xlsx, то можно так: [vba]
Код
Sub SaveAs2() Dim FileName As String, FileFormat As XlFileFormat ActiveWorkbook.RemoveDocumentInformation xlRDIAll ' save as With Application.FileDialog(msoFileDialogSaveAs) .InitialFileName = ActiveWorkbook.Name ' имя файла в диалоге .FilterIndex = 4 ' тип файла в диалоге If .Show Then FileName = .SelectedItems(1) If .FilterIndex <> 4 Then ' меняем расширение и тип файла на тот, который хотим использовать по умолчанию (игнорируя тип, выбранный пользователем в диалоге) FileName = Left$(FileName, InStrRev(FileName, ".")) & "xlsx" FileFormat = xlWorkbookDefault Else FileFormat = xlExcel8 ' пользователь в диалоге казал тип Office 2003 (разрешенный) End If ActiveWorkbook.SaveAs FileName, FileFormat End If End With End Sub
Доброе утро! Спасибо за помощь! Цель была очистить св-ва файла (созданного или создаваемого), при этом дать возможность сохранять в любом формате. Все Ок, единственное, что мешает - предложение сохранить файл в формате с макросами, а этого не нужно.
Доброе утро! Спасибо за помощь! Цель была очистить св-ва файла (созданного или создаваемого), при этом дать возможность сохранять в любом формате. Все Ок, единственное, что мешает - предложение сохранить файл в формате с макросами, а этого не нужно.Rash