Здравствуйте, все! Никак не могу справиться с логикой алгоритма. Есть два макроса. В первом прописано удаление макросов. Во втором запускается "удалялка". Общая задача: отправить письмо с файлом без макросов. Если файл сохранить не отправляя - все нормально - макросы удалены. Однако, по коду из примера открывается окно отправления почты и, если отправить сразу, то уходит с макросами. Подскажете? [vba]
Код
Sub Delete_VBA() Dim oVB As Object For Each oVB In ActiveWorkbook.VBProject.VBComponents On Error Resume Next With oVB If .Type = 1 Or .Type = 2 Or .Type = 3 Then .Collection.Remove oVB If .Type = 100 Then .CodeModule.DeleteLines 1, .CodeModule.CountOfLines End With Next Set oVB = Nothing End Sub Sub Выбор() имя_файла = Range("A1") Application.DisplayAlerts = False Delete_VBA ActiveWorkbook.SaveAs "D:\ППАА\Еженедельное обновление\" & _ Left(Date, 2) & "-" & Mid(Date, 4, 2) & "_Статистика(" & имя_файла & ").xlsb", FileFormat:=xlExcel12 Application.DisplayAlerts = True Application.Dialogs(xlDialogSendMail).Show End Sub
[/vba]
Здравствуйте, все! Никак не могу справиться с логикой алгоритма. Есть два макроса. В первом прописано удаление макросов. Во втором запускается "удалялка". Общая задача: отправить письмо с файлом без макросов. Если файл сохранить не отправляя - все нормально - макросы удалены. Однако, по коду из примера открывается окно отправления почты и, если отправить сразу, то уходит с макросами. Подскажете? [vba]
Код
Sub Delete_VBA() Dim oVB As Object For Each oVB In ActiveWorkbook.VBProject.VBComponents On Error Resume Next With oVB If .Type = 1 Or .Type = 2 Or .Type = 3 Then .Collection.Remove oVB If .Type = 100 Then .CodeModule.DeleteLines 1, .CodeModule.CountOfLines End With Next Set oVB = Nothing End Sub Sub Выбор() имя_файла = Range("A1") Application.DisplayAlerts = False Delete_VBA ActiveWorkbook.SaveAs "D:\ППАА\Еженедельное обновление\" & _ Left(Date, 2) & "-" & Mid(Date, 4, 2) & "_Статистика(" & имя_файла & ").xlsb", FileFormat:=xlExcel12 Application.DisplayAlerts = True Application.Dialogs(xlDialogSendMail).Show End Sub
У меня на работе отправка через не скажу какое место, поэтому проверить не могу.
В качестве предположения - а что будет, если сохранять не в xlsb, а в xlsx? Если нужно именно в xlsb, то потом можно еще раз пересохранить. Кстати, тогда и макросы удалять не нужно - они в xlsx просто не живут.
У меня на работе отправка через не скажу какое место, поэтому проверить не могу.
В качестве предположения - а что будет, если сохранять не в xlsb, а в xlsx? Если нужно именно в xlsb, то потом можно еще раз пересохранить. Кстати, тогда и макросы удалять не нужно - они в xlsx просто не живут._Boroda_
Виктор, такой константы нет Проверить можно так: в редакторе VBA View - object browser - в окошко для поиска ввести xlExcel51. Ничего не будет найдено. А чтобы посмотреть все форматы, можно ввести XlFileFormat
51 - это числовое значение константы xlOpenXMLWorkbook, Вы наверное хотели так написать: [vba]
Код
FileFormat:=51
[/vba]
Виктор, такой константы нет Проверить можно так: в редакторе VBA View - object browser - в окошко для поиска ввести xlExcel51. Ничего не будет найдено. А чтобы посмотреть все форматы, можно ввести XlFileFormat
51 - это числовое значение константы xlOpenXMLWorkbook, Вы наверное хотели так написать: [vba]
[/vba], в ней встаешь мышой вовнутрь слова SaveAs (или даблклик на него - оно выделится) и жмешь F1. Вылетаешь в объяснялку по SaveAs, вот сюда https://msdn.microsoft.com/en-us....5).aspx Там есть табличка с параметрами и пояснениями к ним. В пояснении к параметру FileFormat есть ссылка, топаешь на нее и попадаешь в объяснялку по FileFormat.
[/vba], в ней встаешь мышой вовнутрь слова SaveAs (или даблклик на него - оно выделится) и жмешь F1. Вылетаешь в объяснялку по SaveAs, вот сюда https://msdn.microsoft.com/en-us....5).aspx Там есть табличка с параметрами и пояснениями к ним. В пояснении к параметру FileFormat есть ссылка, топаешь на нее и попадаешь в объяснялку по FileFormat._Boroda_