Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Макрос очистки свойств файла Excel - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Макрос очистки свойств файла Excel
Rash Дата: Среда, 19.08.2015, 13:43 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Добрый день!

Данный макрос осуществляет чистку свойств файла 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]


Сообщение отредактировал Pelena - Среда, 19.08.2015, 14:03
 
Ответить
СообщениеДобрый день!

Данный макрос осуществляет чистку свойств файла 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
Дата добавления - 19.08.2015 в 13:43
Karataev Дата: Четверг, 20.08.2015, 14:45 | Сообщение № 2
Группа: Проверенные
Ранг: Старожил
Сообщений: 1334
Репутация: 533 ±
Замечаний: 0% ±

Excel
При возникновении ошибки, какая строка кода выделяется желтым?
 
Ответить
СообщениеПри возникновении ошибки, какая строка кода выделяется желтым?

Автор - Karataev
Дата добавления - 20.08.2015 в 14:45
Rash Дата: Четверг, 20.08.2015, 16:06 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Спасибо за отклик.
Открываю допустим xls файл, сохраняю его в формате xlsx, но он не открывался до переименования его обратно в xls.


Сообщение отредактировал Rash - Четверг, 20.08.2015, 16:22
 
Ответить
СообщениеСпасибо за отклик.
Открываю допустим xls файл, сохраняю его в формате xlsx, но он не открывался до переименования его обратно в xls.

Автор - Rash
Дата добавления - 20.08.2015 в 16:06
Rash Дата: Четверг, 20.08.2015, 16:17 | Сообщение № 4
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Файл сохраняется, при открытии ошибка (во вложении)
К сообщению приложен файл: 3458739.jpg (13.9 Kb)


Сообщение отредактировал Rash - Четверг, 20.08.2015, 16:22
 
Ответить
СообщениеФайл сохраняется, при открытии ошибка (во вложении)

Автор - Rash
Дата добавления - 20.08.2015 в 16:17
KSV Дата: Четверг, 20.08.2015, 16:42 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
Дык, все правильно :)
Вы же в диалоге выбираете формат .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]


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333


Сообщение отредактировал KSV - Четверг, 20.08.2015, 17:31
 
Ответить
СообщениеДык, все правильно :)
Вы же в диалоге выбираете формат .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]

Автор - KSV
Дата добавления - 20.08.2015 в 16:42
Rash Дата: Пятница, 21.08.2015, 09:35 | Сообщение № 6
Группа: Пользователи
Ранг: Прохожий
Сообщений: 6
Репутация: 0 ±
Замечаний: 20% ±

Excel 2013
Доброе утро!
Спасибо за помощь! Цель была очистить св-ва файла (созданного или создаваемого), при этом дать возможность сохранять в любом формате.
Все Ок, единственное, что мешает - предложение сохранить файл в формате с макросами, а этого не нужно.
 
Ответить
СообщениеДоброе утро!
Спасибо за помощь! Цель была очистить св-ва файла (созданного или создаваемого), при этом дать возможность сохранять в любом формате.
Все Ок, единственное, что мешает - предложение сохранить файл в формате с макросами, а этого не нужно.

Автор - Rash
Дата добавления - 21.08.2015 в 09:35
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!