Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.90/40: Рейтинг темы: голосов - 40, средняя оценка - 4.90
0 / 0 / 0
Регистрация: 06.02.2020
Сообщений: 16
1
Excel

Сохранение диапазона ячеек по кнопке в новый файл

12.05.2020, 14:07. Показов 7752. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день!
Создаю макрос к кнопке, которая выделяет диапазон с A2 до крайней левой и крайней нижней, копирует его в новую книгу и сохраняет ее в формате .xlsx и .pdf.

Код который у меня сейчас есть:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
Sub VoronkaSaveAsDocument()
    Dim M As String
    Dim S As String
    Dim x As Long
    
    M = Range("N1").Value
    
   
    Worksheets("Воронка кандидатов").Activate
    
    Range("A2").Select
    Range(Selection, Selection.End(xlDown)).Select
    Range(Selection, Selection.End(xlToRight)).Select
    Selection.Copy
    Workbooks.Add
    Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
        , SkipBlanks:=False, Transpose:=False
    Selection.ColumnWidth = 12.9
    Selection.Rows.AutoFit
        
    
    ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & M & ".xlsx", _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        
   ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _
   Filename:=ThisWorkbook.Path & "\" & M & ".pdf"
  
    ActiveWindow.Close
      Windows("Новый дизайн профилей.xlsm").Activate
 
    Application.ScreenUpdating = True
End Sub
В данном случае он выдает следующую ошибку:
Сохранение диапазона ячеек по кнопке в новый файл


При этом, если заменить :
Visual Basic
1
2
Selection.PasteSpecial Paste:=xlPasteAllUsingSourceTheme, Operation:=xlNone _
        , SkipBlanks:=False, Transpose:=False
на:
Visual Basic
1
2
ActiveWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & M & ".xlsx", _
        FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
То код работает, но мне необходимо сохранить исходное форматирование, но преобразовать все имеющиеся формулы в значения (в приведенном файле все уже преобразовано в значения, так как вычищена конфи инфа). Количество выводимых строк-динамическое, может быть 5, а может 555.

На всякий случай файл прикрепляю. https://yadi.sk/d/gInQqQV2DeAIBw. Код находится в 4 модуле.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2020, 14:07
Ответы с готовыми решениями:

Сохранение выделенных ячеек в текстовый файл построчно
Здравствуйте Уважаемые! Нужен код для сохранения выделенных ячеек в столбце, в текстовый файл...

Сохранение в новый файл
Добрый день, Имеется такая вот программа, цель которой искать текст и заменять текст в файлах....

Сохранение текста из нескольких textbox, ComboBox и тд. в новый файл
Здравствуйте, помогите новичку! есть пример: Public Class Form1 Private Sub...

Поворот изображения на произвольный угол и сохранение результата в новый файл
Всем доброго времени суток. Столкнулся со следующей проблемой: необходимо изображение, загруженное...

8
6944 / 2849 / 548
Регистрация: 19.10.2012
Сообщений: 8,724
12.05.2020, 14:42 2
У меня отработало.
Правда строк там не 555, а 1048575, может поэтому у Вас и глючит - вычистите весь мусор под таблицей.
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
12.05.2020, 15:16 3
Лучший ответ Сообщение было отмечено yulilntv как решение

Решение

yulilntv, Если данные под таблицей копировать не нужно и в таблице нет полностью пустых строк, то без проверки корректности указания имени файла (ячейка N1 активного раб.листа) можно и так :

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Test()
    Dim wb As Workbook, ws As Worksheet, r As Range
    Dim p$: p = ThisWorkbook.Path & "\" & CStr(Range("N1"))
    
    Set r = ThisWorkbook.Worksheets("Воронка кандидатов").Range("A1").CurrentRegion
    Set wb = Workbooks.Add(xlWBATWorksheet)
    Set ws = wb.Worksheets(1)
    
    r.Copy ws.Range("A1") 'ws.Range(r.Address)
    With ws.Range(r.Address)
         .Value = r.Value
         .ColumnWidth = 12.9
    End With
    
    wb.SaveAs p & ".xlsx", xlOpenXMLWorkbook ', CreateBackup:=False
    ws.ExportAsFixedFormat xlTypePDF, p & ".pdf"
End Sub

Если с определением диапазона вышла промашка, то можно еще протестировать .UsedRange (на замену .Range("A1").CurrentRegion)
1
6944 / 2849 / 548
Регистрация: 19.10.2012
Сообщений: 8,724
12.05.2020, 16:01 4
Да, имя файла в переменную M = Range("N1").Value я естественно ставил.
0
0 / 0 / 0
Регистрация: 06.02.2020
Сообщений: 16
12.05.2020, 17:10  [ТС] 5
pashulka, спасибо, макрос отрабатывает сохранение, но при таком раскладе он некрасиво сохраняет в PDF. Есть ли возможность сохранить либо с вмещением хотя бы всех столбцов? Сейчас он обрезает на 6 столбце и сохраняет на разные листы.
Сохранение диапазона ячеек по кнопке в новый файл

Можно ли сделать нечто похожее на эти выборы:
Сохранение диапазона ячеек по кнопке в новый файл
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
12.05.2020, 17:32 6
Цитата Сообщение от yulilntv Посмотреть сообщение
Есть ли возможность сохранить либо с вмещением хотя бы всех столбцов?
Есть, но как увидеть данные без мелкоскопа в таких умещённых столбцах

Visual Basic
1
2
3
4
5
6
7
With ws.PageSetup
     .LeftMargin = 0 'Application.InchesToPoints(0)
     .RightMargin = 0 'Application.InchesToPoints(0)
     .Zoom = False
     .FitToPagesWide = 1
End With
ws.ExportAsFixedFormat xlTypePDF, p & ".pdf"
0
0 / 0 / 0
Регистрация: 06.02.2020
Сообщений: 16
12.05.2020, 17:35  [ТС] 7
И еще, пыталась адаптировать Ваш код под еще один макрос для другого листа, но с фиксированным диапазоном, получилось следующее:
Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub SaveAsDocument()
    
     Dim wb As Workbook, ws As Worksheet, r As Range
    Dim p$: p = ThisWorkbook.Path & "\" & CStr(Range("E1")) - изменила ячейку, из которой берется название документа
    
    Set r = ThisWorkbook.Worksheets("Подбор под профиль").Range("A1:D64").CurrentRegion - изменила название листа и пыталась зафиксировать диапазон
    Set wb = Workbooks.Add(xlWBATWorksheet)
    Set ws = wb.Worksheets(1)
    
    r.Copy ws.Range("A1:D64") 'ws.Range(r.Address) - пыталась зафиксировать диапазон
    With ws.Range(r.Address)
         .Value = r.Value
         .ColumnWidth = 32.91
    End With
    
    wb.SaveAs p & ".xlsx", xlOpenXMLWorkbook ', CreateBackup:=False
    ws.ExportAsFixedFormat xlTypePDF, p & ".pdf"
    
End Sub
Но он все равно доходит до первой пустой ячейки и сохраняет лишь часть. Подскажите пожалуйста, что я упустила? В каком месте фиксируется копируемый диапазон?
0
4135 / 2239 / 940
Регистрация: 01.12.2010
Сообщений: 4,624
12.05.2020, 18:15 8
У меня нет фиксированного диапазона. У меня используется CurrentRegion, а это выделить ячейку A1 (можно и другую), затем F5, Выделить, Текущую область - Ок. Если такой диапазон определяется правильно, то ничего менять не надо, если нет, повторюсь, сначала пробуйте .UsedRange


А с фиксированным, наоборот, CurrentRegion не нужен. Ничего более менять не нужно.

Visual Basic
1
Set r = ThisWorkbook.Worksheets("Подбор под профиль").Range("A1:D64")
0
0 / 0 / 0
Регистрация: 06.02.2020
Сообщений: 16
12.05.2020, 18:21  [ТС] 9
pashulka, в любом случае, спасибо Вам большое за помощь, это именно то, что мне было необходимо.
Пойду разбираться и адаптировать)
0
12.05.2020, 18:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2020, 18:21
Помогаю со студенческими работами здесь

Составить новый файл, где класс с максимальным количеством школьников будет записан в новый файл и рассортирован по возрасту.
Решите))) Сформировать файл из школьников: ФИО, дата рождения (дд, мм, гг), класс. Составить новый...

Сохранение листа книги в новый файл с определенным названием в новую папку с таким же названием в определенной папке
Привет всем профи и любителям! Прошу помочь с написанием макроса. Имеется книга с 2 листами....

Копирование диапазона ячеек
Уважаемые форумчане, подскажите, пожалуйста. Хочу скопировать диапазон ячеек с одного листа на...

суммирование диапазона ячеек
Всем добрый день. Столкнулся с такой проблемой. Есть набор данных в строках со значением к/* (* -...

Удаление диапазона ячеек
Добрый день, форумчане! Как из DataGridView удалить диапазон ячеек, если известен номер начальной и...

Выбор диапазона ячеек
Что-то совсем все подзабыл... в общем есть отчет для подсчета стажа сотрудников, который в свою...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru