Страницы: 1
RSS
Макрос копирующий диапазон в новый лист с сохранением настроек
 
Добрый день всем присутствующим на одном из лучших сайтов простора рунета.

Я набрался смелости и решил обратиться сюда.
Ситуация следующая:
Есть книга > есть лист. Необходимо было создать кнопку , и назначить ей макрос, копирующий диапазон данных , и создающих новый файл в указанной директории. Всё получилось спустя 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
Изменено: vikttur - 20.09.2021 10:05:37
 
Прилагаю файл для осмотра.
 
Код
Sub SozdatFajl2()
    ActiveSheet.Copy
    Range("S1:XFD1048576").Delete Shift:=xlToLeft
    Range("A1:I1048576").Delete Shift:=xlToLeft
    Rows("46:1048576").Delete Shift:=xlUp
    ActiveWorkbook.SaveAs Filename:="C:\Users\TsarakovRCh\Documents\Тестирование\Деффектная ведомость.xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
 
Цитата
МатросНаЗебре написал:
Sub SozdatFajl2()
Спасибо за внимание. Но есть один ньюанс. Я не стал описыватьв исходном сообщении. Дело в том, что данные должны копироваться на лист без макросов. Это приоритетно!
И если можно указать место сохранения
C:\Users\TsarakovRCh\Documents\Тестирование\Деффектная ведомость
 
Цитата
Родион Цараков написал:
данные должны копироваться на лист без макросов
Надеюсь, это означает, сохранить в файл с раcширением xlsx. А не использовать макрос, без использования макросов )
Код
Sub SozdatFajl2()
    ActiveSheet.Copy
    Range("S1:XFD1048576").Delete Shift:=xlToLeft
    Range("A1:I1048576").Delete Shift:=xlToLeft
    Rows("46:1048576").Delete Shift:=xlUp
    ActiveWorkbook.SaveAs Filename:="C:\Users\TsarakovRCh\Documents\Тестирование\Деффектная ведомость\Деффектная ведомость.xlsx", FileFormat:= xlOpenXMLWorkbook, CreateBackup:=False
End Sub
 
Видимо я не так изъясняюсь ))  

Мне нужно чтобы при нажатии на кнопку, происходило копирование этого листа в новую книгу. Всё ровно так же как вы сделали. НО, чтобы на конечном файле Отсутствовали все макросы.
То есть в итоге новая книга это просто файл который можно редактировать , или напечатать. не более того.

Мой код как раз выполняет такую функцию, но он не сохраняет размеры. Прошу помогите до конца )))))))))
Всё как вы сделали, но только чтобы на новом файле отсутствовали макросы. Во имя всего святого )))))
Изменено: vikttur - 20.09.2021 12:29:00
 
Цитата
Родион Цараков написал:
НО, чтобы на конечном файле Отсутствовали все макросы.
а приведенный код это и делает. Закройте сохраненную книгу и откройте заново - ни одного макроса там не будет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
В момент создания нового файла, excel конфликтует выдавая ошибку. Приведенный мной код, в начале данного обсуждения выполняет функцию корректно, но не сохраняет размерность.  
Изменено: vikttur - 20.09.2021 13:44:38
 
Цитата
Родион Цараков написал:
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 прочитали?
 
Да , читал. Но необходимо чтобы была операция без лишних манипуляций. Конечный "продукт" будет предоставлен людям, которые очень далеки от компьютеров. И для них, запомнить этот порядок действий будет очень тяжело.
Изменено: vikttur - 22.09.2021 11:20:00
 
Цитата
Родион Цараков написал: необходимо чтобы была операция без лишних манипуляций
Пропишите эти манипуляции в самом макросе. Закрыть и открыть целевую книгу Вас затруднит прописать в коде?

Формула массива (ФМ) вводится Ctrl+Shift+Enter
Memento mori
 
В сообщении #7 нет действий, порядок которых нужно запоминать людям очень далёким от компьютера. Там описаны действия для людей, видимо, очень близким к компьютеру. "Закройте сохранённую книгу".

Ну или
Код
ActiveWorkbook.Close
Изменено: МатросНаЗебре - 22.09.2021 10:38:02
 
Цитата
Родион Цараков написал:
Конечный "продукт" будет предоставлен людям, которые очень далеки от компьютеров
тогда тем более предложенный вариант самый оптимальный. Т.к. для удаления макросов самим кодом, конечных пользователей придется гонять в дебри настроек 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
Изменено: Дмитрий(The_Prist) Щербаков - 22.09.2021 10:42:07
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
Страницы: 1
Наверх