Добрый день всем присутствующим на одном из лучших сайтов простора рунета.
Я набрался смелости и решил обратиться сюда. Ситуация следующая: Есть книга > есть лист. Необходимо было создать кнопку , и назначить ей макрос, копирующий диапазон данных , и создающих новый файл в указанной директории. Всё получилось спустя 8 часов ковыряния интернета. НО! Данные копируются без сохранения значений ширины столбца и высоты строки. То есть, визуальная составляющая игнорируется при переносе данных на новый файл.
Код прилагаю. Пожалуйста обратите внимание. Помогите разобраться. Сам в написании не силён , всего достигаю методом тыка.
Код
Sub SozdatFajl()
Sheets("Заказ").Range("J1:R45").Copy
Workbooks.Add
ActiveSheet.Paste Destination:=Range("A1")
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs _
Filename:="C:\Users\TsarakovRCh\Documents\Тестирование\Деффектная ведомость"
Application.DisplayAlerts = True
End Sub
Спасибо за внимание. Но есть один ньюанс. Я не стал описыватьв исходном сообщении. Дело в том, что данные должны копироваться на лист без макросов. Это приоритетно! И если можно указать место сохранения C:\Users\TsarakovRCh\Documents\Тестирование\Деффектная ведомость
Мне нужно чтобы при нажатии на кнопку, происходило копирование этого листа в новую книгу. Всё ровно так же как вы сделали. НО, чтобы на конечном файле Отсутствовали все макросы. То есть в итоге новая книга это просто файл который можно редактировать , или напечатать. не более того.
Мой код как раз выполняет такую функцию, но он не сохраняет размеры. Прошу помогите до конца ))))))))) Всё как вы сделали, но только чтобы на новом файле отсутствовали макросы. Во имя всего святого )))))
В момент создания нового файла, excel конфликтует выдавая ошибку. Приведенный мной код, в начале данного обсуждения выполняет функцию корректно, но не сохраняет размерность.
для вставки ширины столбцов есть спец.вставка. Высоту строк так перенести нельзя и придется делать цикл по каждой строке. А удалять макросы еще сложнее. Вот здесь пример того, как это делается и что должно быть выполнено(например, галочка с доверием к проекту VBA): Как удалить макросы в книге? Поверьте, код, предложенный выше куда компактнее и надежнее.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Родион Цараков написал: В момент создания нового файла, excel конфликтует
А точно в момент создания нового файла? Не в момент сохранения?
Код
Sub SozdatFajl3()
ActiveSheet.Copy
Range("S1:XFD1048576").Delete Shift:=xlToLeft
Range("A1:I1048576").Delete Shift:=xlToLeft
Rows("46:1048576").Delete Shift:=xlUp
Const sFull = "C:\Users\TsarakovRCh\Documents\Тестирование\Деффектная ведомость\Деффектная ведомость.xlsx"
On Error Resume Next
Workbooks("Деффектная ведомость.xlsx").Close False
On Error GoTo 0
If Dir(sFull) <> "" Then Kill sFull
ActiveWorkbook.SaveAs Filename:=sFull, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
End Sub
МатросНаЗебре написал: А точно в момент создания нового файла?
На новом файле остаются макросы. То есть по сути данным кодом мы просто копируем его - макросы остаются - ссылаются на другие листы - и выдают ошибку. А мне нужно было просто скопировать лист, только его содержимое , и сохранить при этом размеры.
Да , читал. Но необходимо чтобы была операция без лишних манипуляций. Конечный "продукт" будет предоставлен людям, которые очень далеки от компьютеров. И для них, запомнить этот порядок действий будет очень тяжело.
В сообщении #7 нет действий, порядок которых нужно запоминать людям очень далёким от компьютера. Там описаны действия для людей, видимо, очень близким к компьютеру. "Закройте сохранённую книгу".
Родион Цараков написал: Конечный "продукт" будет предоставлен людям, которые очень далеки от компьютеров
тогда тем более предложенный вариант самый оптимальный. Т.к. для удаления макросов самим кодом, конечных пользователей придется гонять в дебри настроек Excel(кодом эти настройки не изменить без дополнительных плясок с бубном). Вы бы хоть постарались прочитать статьи, на которые ссылки Вам дали.
Цитата
Родион Цараков написал: запомнить этот порядок действий будет очень тяжело
Какой порядок? Нажать кнопку? пропишите в коде закрытие сохраненной книги с последующим открытием. Пользователь лишь моргнуть успеет между этими двумя действиями.
Код
Sub SozdatFajl3()
Application.ScreenUpdating = 0
ActiveSheet.Copy
Range("S1:XFD1048576").Delete Shift:=xlToLeft
Range("A1:I1048576").Delete Shift:=xlToLeft
Rows("46:1048576").Delete Shift:=xlUp
Const sFull = "C:\Users\TsarakovRCh\Documents\Тестирование\Деффектная ведомость\Деффектная ведомость.xlsx"
On Error Resume Next
Workbooks("Деффектная ведомость.xlsx").Close False
On Error GoTo 0
If Dir(sFull) <> "" Then Kill sFull
ActiveWorkbook.SaveAs Filename:=sFull, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Workbooks.Open sFull
Application.ScreenUpdating = 1
End Sub