Всем привет! Кросс Да, я знаю, что тема на форуме поднималась не первый десяток раз, но все же столкнулся вот с какими нюансами: В копилке есть вот такой макрос: [vba]
Код
Private Sub CommandButton1_Click() Dim strFileName As String s = Sheets("Данные").Range("N1").Value a = Split(s, ",") For i = 0 To UBound(a) 'начало цикла по массиву а с шагом по умолчанию 1 a(i) = Sheets(Val(a(i))).Name 'действия для каждой итерации цикла Next 'переход на следующую итерацию циклаSheets(a).Select Sheets(a).Select strFileName = "Бланк обмера " & Sheets("Данные").Range("L1").Value On Error Resume Next ChDir "\" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ ActiveWorkbook.Path & "\" & strFileName, Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub
Sub d() strFileName = "Бланк обмера " & Sheets("Данные").Range("L1").Value On Error Resume Next ChDir "\" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ ActiveWorkbook.Path & "\" & strFileName, Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub
[/vba] , работа которого меня полностью устраивает но: - после выполнения макроса листы отправленные в pdf остаются активными, т.е. выделенными. - попытался присвоить имя из ячеек, находящихся на другом листе: [vba]
[/vba] макрос срабатывает, но файл не создается и соответственно его нельзя увидеть. - pdf файл автоматически создается в папке, в которой находится исходный файл, а мне необходимо, чтобы созданные файлы помещались в определенную папку, например: Диск D - Смета - Обмеры. Возможно ли данный макрос подправить с учетом изложенных выше предпочтений? Спасибо.
Всем привет! Кросс Да, я знаю, что тема на форуме поднималась не первый десяток раз, но все же столкнулся вот с какими нюансами: В копилке есть вот такой макрос: [vba]
Код
Private Sub CommandButton1_Click() Dim strFileName As String s = Sheets("Данные").Range("N1").Value a = Split(s, ",") For i = 0 To UBound(a) 'начало цикла по массиву а с шагом по умолчанию 1 a(i) = Sheets(Val(a(i))).Name 'действия для каждой итерации цикла Next 'переход на следующую итерацию циклаSheets(a).Select Sheets(a).Select strFileName = "Бланк обмера " & Sheets("Данные").Range("L1").Value On Error Resume Next ChDir "\" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ ActiveWorkbook.Path & "\" & strFileName, Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub
Sub d() strFileName = "Бланк обмера " & Sheets("Данные").Range("L1").Value On Error Resume Next ChDir "\" ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ ActiveWorkbook.Path & "\" & strFileName, Quality:= _ xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _ OpenAfterPublish:=True End Sub
[/vba] , работа которого меня полностью устраивает но: - после выполнения макроса листы отправленные в pdf остаются активными, т.е. выделенными. - попытался присвоить имя из ячеек, находящихся на другом листе: [vba]
[/vba] макрос срабатывает, но файл не создается и соответственно его нельзя увидеть. - pdf файл автоматически создается в папке, в которой находится исходный файл, а мне необходимо, чтобы созданные файлы помещались в определенную папку, например: Диск D - Смета - Обмеры. Возможно ли данный макрос подправить с учетом изложенных выше предпочтений? Спасибо.graffserg
1. выделите один лист селектом 2. сцепили вы "Бланк обмера " с L1 V1 M2 и W4 и что получили в итоге? 3. замените ActiveWorkbook.Path на нужный путь
1. выделите один лист селектом 2. сцепили вы "Бланк обмера " с L1 V1 M2 и W4 и что получили в итоге? 3. замените ActiveWorkbook.Path на нужный путь_Boroda_
сцепить название. В макросе подправил строку: [vba]
Код
strFileName = Sheets("Данные").Range("L1").Value
[/vba] Нажимаю кнопку - появляется окно "Идет процесс публикации", потом перебрасывает на 1 лист книги excel и все на этом заканчивается. Предполагаю, что это связано с длинной имени файла, т.к. оставляя в формуле:
Код
=СЦЕПИТЬ(ТЕКСТ(Бланк_обмера!W4;"ДД.ММ.ГГГГ"))
Файл создается и имя ему присваивается в виде даты.
сцепить название. В макросе подправил строку: [vba]
Код
strFileName = Sheets("Данные").Range("L1").Value
[/vba] Нажимаю кнопку - появляется окно "Идет процесс публикации", потом перебрасывает на 1 лист книги excel и все на этом заканчивается. Предполагаю, что это связано с длинной имени файла, т.к. оставляя в формуле:
Код
=СЦЕПИТЬ(ТЕКСТ(Бланк_обмера!W4;"ДД.ММ.ГГГГ"))
Файл создается и имя ему присваивается в виде даты.graffserg
Сообщение отредактировал graffserg - Четверг, 13.10.2022, 15:51
[/vba] Вот, если на рабочей книге в ячейке L1 присутствует дата, то макрос работает и сохраняет файл "Бланк обмера 02.09.2022.pdf". Но как только в ячейку вставить формулу:
, которая должна выводить название файла: "02.09.2022 пом. № 1 (этаж 1) г. Рога и копыта ул. Интересная д. 29.pdf", макрос не работает.
Но парадокс в том, что если листы книги очистить от содержимого и проделать те же манипуляции, как в первом случае - вставить формулу целиком, макрос работает исправно.
Вся загвоздка, на мой взгляд в этой строке макроса: [vba]
[/vba] Вот, если на рабочей книге в ячейке L1 присутствует дата, то макрос работает и сохраняет файл "Бланк обмера 02.09.2022.pdf". Но как только в ячейку вставить формулу:
, которая должна выводить название файла: "02.09.2022 пом. № 1 (этаж 1) г. Рога и копыта ул. Интересная д. 29.pdf", макрос не работает.
Но парадокс в том, что если листы книги очистить от содержимого и проделать те же манипуляции, как в первом случае - вставить формулу целиком, макрос работает исправно.graffserg
сдается мне вы не указали самое важное - расширение файла в строке
Попробовал, но ничего не получается - результат тот же. Буду продолжать раскопки.
И вот спустя несколько часов макрос переработал: [vba]
Код
Sub Печать() Dim CellValue As String Dim Path As String Dim FinalFileName As String Application.ScreenUpdating = False Path = "C:\Users\Admin\Desktop\" 'Путь сохранения файла 'CellValue = Worksheets("Данные").Range("L1") '№ ячейки для присвоения имени SheetName = Worksheets("Данные").Range("L1").Value
FinalFileName = Path & SheetName & ".pdf" 'Формируем итоговый путь и название файла 'запоминаем имя выбранного листа - будем подставлять в путь для сохранения в PDF
Sheets(Array("Бланк_обмера", "Стена_A", "Стена_B", "Стена_C", "Стена_D", "Потолок", "Пол", "Лист1")).Select 'проверка - пуст лист или нет. Если пуст, то сообщаем If WorksheetFunction.CountA(ActiveSheet.Cells) = 0 Then MsgBox "Лист '" & SheetName & "' пуст! Невозможно его сохранить в PDF!", vbInformation, "Внимание" StartSheet.Select Exit Sub End If
[/vba] Самое удивительное, что он работает - все собирает, сохраняет и так как я хочу, но: 1. Я до сих пор не могу добиться того, чтобы имя присваивалось с листа "Данные" ячейка L1, в которой находится все таже злополучная формула:
2. Еще одно но, но не особо существенное. Если к примеру выбран один лист и он пустой ( в моем случает "Лист1"), то макрос срабатывает на уведомление. [vba]
Код
Sheets(Array("Бланк_обмера", "Стена_A", "Стена_B", "Стена_C", "Стена_D", "Потолок", "Пол", "Лист1")).Select 'проверка - пуст лист или нет. Если пуст, то сообщаем If WorksheetFunction.CountA(ActiveSheet.Cells) = 0 Then MsgBox "Лист '" & SheetName & "' пуст! Невозможно его сохранить в PDF!", vbInformation, "Внимание"
[/vba]. А вот если выбрано несколько листов и среди них есть пустой лист, то макрос это уведомление пропускает.
Помогите разобраться и добить данный вопрос до конца. Спасибо.
сдается мне вы не указали самое важное - расширение файла в строке
Попробовал, но ничего не получается - результат тот же. Буду продолжать раскопки.
И вот спустя несколько часов макрос переработал: [vba]
Код
Sub Печать() Dim CellValue As String Dim Path As String Dim FinalFileName As String Application.ScreenUpdating = False Path = "C:\Users\Admin\Desktop\" 'Путь сохранения файла 'CellValue = Worksheets("Данные").Range("L1") '№ ячейки для присвоения имени SheetName = Worksheets("Данные").Range("L1").Value
FinalFileName = Path & SheetName & ".pdf" 'Формируем итоговый путь и название файла 'запоминаем имя выбранного листа - будем подставлять в путь для сохранения в PDF
Sheets(Array("Бланк_обмера", "Стена_A", "Стена_B", "Стена_C", "Стена_D", "Потолок", "Пол", "Лист1")).Select 'проверка - пуст лист или нет. Если пуст, то сообщаем If WorksheetFunction.CountA(ActiveSheet.Cells) = 0 Then MsgBox "Лист '" & SheetName & "' пуст! Невозможно его сохранить в PDF!", vbInformation, "Внимание" StartSheet.Select Exit Sub End If
[/vba] Самое удивительное, что он работает - все собирает, сохраняет и так как я хочу, но: 1. Я до сих пор не могу добиться того, чтобы имя присваивалось с листа "Данные" ячейка L1, в которой находится все таже злополучная формула:
2. Еще одно но, но не особо существенное. Если к примеру выбран один лист и он пустой ( в моем случает "Лист1"), то макрос срабатывает на уведомление. [vba]
Код
Sheets(Array("Бланк_обмера", "Стена_A", "Стена_B", "Стена_C", "Стена_D", "Потолок", "Пол", "Лист1")).Select 'проверка - пуст лист или нет. Если пуст, то сообщаем If WorksheetFunction.CountA(ActiveSheet.Cells) = 0 Then MsgBox "Лист '" & SheetName & "' пуст! Невозможно его сохранить в PDF!", vbInformation, "Внимание"
[/vba]. А вот если выбрано несколько листов и среди них есть пустой лист, то макрос это уведомление пропускает.
Помогите разобраться и добить данный вопрос до конца. Спасибо.graffserg
Сообщение отредактировал graffserg - Суббота, 15.10.2022, 00:43
Ура!!! Я нашел причину - ЗАПРЕЩЕННЫЕ ЗНАКИ в имени файла. Вот итог: [vba]
Код
Sub Печать() Dim CellValue As String Dim Path As String Dim FinalFileName As String Application.ScreenUpdating = False Path = "C:\Users\Admin\Desktop\" 'Путь сохранения файла SheetName = Sheets("Данные").Range("L1").Value
FinalFileName = Path & SheetName & ".pdf" 'Формируем итоговый путь и название файла 'запоминаем имя выбранного листа - будем подставлять в путь для сохранения в PDF
Sheets(Array("Бланк_обмера", "Стена_A", "Стена_B", "Стена_C", "Стена_D", "Потолок", "Пол")).Select 'проверка - пуст лист или нет. Если пуст, то сообщаем If WorksheetFunction.CountA(ActiveSheet.Cells) = 0 Then MsgBox "Лист '" & SheetName & "' пуст! Невозможно его сохранить в PDF!", vbInformation, "Внимание" StartSheet.Select Exit Sub End If
Ура!!! Я нашел причину - ЗАПРЕЩЕННЫЕ ЗНАКИ в имени файла. Вот итог: [vba]
Код
Sub Печать() Dim CellValue As String Dim Path As String Dim FinalFileName As String Application.ScreenUpdating = False Path = "C:\Users\Admin\Desktop\" 'Путь сохранения файла SheetName = Sheets("Данные").Range("L1").Value
FinalFileName = Path & SheetName & ".pdf" 'Формируем итоговый путь и название файла 'запоминаем имя выбранного листа - будем подставлять в путь для сохранения в PDF
Sheets(Array("Бланк_обмера", "Стена_A", "Стена_B", "Стена_C", "Стена_D", "Потолок", "Пол")).Select 'проверка - пуст лист или нет. Если пуст, то сообщаем If WorksheetFunction.CountA(ActiveSheet.Cells) = 0 Then MsgBox "Лист '" & SheetName & "' пуст! Невозможно его сохранить в PDF!", vbInformation, "Внимание" StartSheet.Select Exit Sub End If
Всем привет!! Подскажите пожалуйста, возможно ли в данный макрос: [vba]
Код
Sub Печать() Dim CellValue As String Dim Path As String Dim FinalFileName As String Application.ScreenUpdating = False Path = "C:\Users\Admin\Desktop\" 'Путь сохранения файла SheetName = Sheets("Данные").Range("L1").Value
FinalFileName = Path & SheetName & ".pdf" 'Формируем итоговый путь и название файла 'запоминаем имя выбранного листа - будем подставлять в путь для сохранения в PDF
Sheets(Array("Бланк_обмера", "Стена_A", "Стена_B", "Стена_C", "Стена_D", "Потолок", "Пол")).Select 'проверка - пуст лист или нет. Если пуст, то сообщаем If WorksheetFunction.CountA(ActiveSheet.Cells) = 0 Then MsgBox "Лист '" & SheetName & "' пуст! Невозможно его сохранить в PDF!", vbInformation, "Внимание" StartSheet.Select Exit Sub End If
[/vba] дописать код с возможностью сохранения файла еще и в формате EXCEL. В процессе работы понял, что под рукой нужно иметь два файла - исходник и pdf. Спасибо.
Всем привет!! Подскажите пожалуйста, возможно ли в данный макрос: [vba]
Код
Sub Печать() Dim CellValue As String Dim Path As String Dim FinalFileName As String Application.ScreenUpdating = False Path = "C:\Users\Admin\Desktop\" 'Путь сохранения файла SheetName = Sheets("Данные").Range("L1").Value
FinalFileName = Path & SheetName & ".pdf" 'Формируем итоговый путь и название файла 'запоминаем имя выбранного листа - будем подставлять в путь для сохранения в PDF
Sheets(Array("Бланк_обмера", "Стена_A", "Стена_B", "Стена_C", "Стена_D", "Потолок", "Пол")).Select 'проверка - пуст лист или нет. Если пуст, то сообщаем If WorksheetFunction.CountA(ActiveSheet.Cells) = 0 Then MsgBox "Лист '" & SheetName & "' пуст! Невозможно его сохранить в PDF!", vbInformation, "Внимание" StartSheet.Select Exit Sub End If
[/vba] дописать код с возможностью сохранения файла еще и в формате EXCEL. В процессе работы понял, что под рукой нужно иметь два файла - исходник и pdf. Спасибо.graff9540
Всем привет! Вот, нашел в готовых решениях макрос и подогнал под себя, вроде все работает и устраивает (время покажет): [vba]
Код
Sub Backup_Active_Workbook() Dim x As String strPath = "c:\TEMP" 'папка для сохранения резервной копии On Error Resume Next x = GetAttr(strPath) And 0 If Err = 0 Then ' если путь существует - сохраняем копию книги, добавляя дату-время strDate = Format(Now, "dd-mm-yy hh-mm") FileNameXls = strPath & "\" & Sheets("Данные").Range("A1").Value & " " & strDate & ".xlsm" 'или xlsm ActiveWorkbook.SaveCopyAs FileName:=FileNameXls Else 'если путь не существует - выводим сообщение MsgBox "Папка " & strPath & " недоступна или не существует!", vbCritical End If End Sub
[/vba] Подскажите пожалуйста, как можно объединить эти два макроса в один? Хочется нажать кнопку и получить на выходе 2 файла: один в pdf формате, а другой в xlsm, т.е. копию
Всем привет! Вот, нашел в готовых решениях макрос и подогнал под себя, вроде все работает и устраивает (время покажет): [vba]
Код
Sub Backup_Active_Workbook() Dim x As String strPath = "c:\TEMP" 'папка для сохранения резервной копии On Error Resume Next x = GetAttr(strPath) And 0 If Err = 0 Then ' если путь существует - сохраняем копию книги, добавляя дату-время strDate = Format(Now, "dd-mm-yy hh-mm") FileNameXls = strPath & "\" & Sheets("Данные").Range("A1").Value & " " & strDate & ".xlsm" 'или xlsm ActiveWorkbook.SaveCopyAs FileName:=FileNameXls Else 'если путь не существует - выводим сообщение MsgBox "Папка " & strPath & " недоступна или не существует!", vbCritical End If End Sub
[/vba] Подскажите пожалуйста, как можно объединить эти два макроса в один? Хочется нажать кнопку и получить на выходе 2 файла: один в pdf формате, а другой в xlsm, т.е. копиюgraff9540
Sub Печать() Dim CellValue As String Dim Path As String Dim FinalFileName As String Application.ScreenUpdating = False strPath = "C:\Users\Admin\Desktop" 'папка для сохранения резервной копии
SheetName = Sheets("Данные").Range("L1").Value
FinalFileName = strPath & SheetName & ".pdf" 'Формируем итоговый путь и название файла 'запоминаем имя выбранного листа - будем подставлять в путь для сохранения в PDF FinalFileName1 = strPath & SheetName & ".xlsm" 'Формируем итоговый путь и название файла 'запоминаем имя выбранного листа - будем подставлять в путь для сохранения в xlsm
Sheets(Array("Бланк_обмера", "Стена_A", "Стена_B", "Стена_C", "Стена_D", "Потолок", "Пол")).Select 'проверка - пуст лист или нет. Если пуст, то сообщаем If WorksheetFunction.CountA(ActiveSheet.Cells) = 0 Then MsgBox "Лист '" & SheetName & "' пуст! Невозможно его сохранить в PDF!", vbInformation, "Внимание" StartSheet.Select Exit Sub End If
Application.ScreenUpdating = True MsgBox "Бланк обмера " & SheetName & " сохранён в формате PDF и XLSM!", vbInformation, "Конец" Exit Sub Sheets("Бланк_обмера").Select
End Sub
[/vba]
Вроде все работает. Может есть огрехи? Буду признателен за оказанную помощь.
Вот, получилось объединить макросы: [vba]
Код
Sub Печать() Dim CellValue As String Dim Path As String Dim FinalFileName As String Application.ScreenUpdating = False strPath = "C:\Users\Admin\Desktop" 'папка для сохранения резервной копии
SheetName = Sheets("Данные").Range("L1").Value
FinalFileName = strPath & SheetName & ".pdf" 'Формируем итоговый путь и название файла 'запоминаем имя выбранного листа - будем подставлять в путь для сохранения в PDF FinalFileName1 = strPath & SheetName & ".xlsm" 'Формируем итоговый путь и название файла 'запоминаем имя выбранного листа - будем подставлять в путь для сохранения в xlsm
Sheets(Array("Бланк_обмера", "Стена_A", "Стена_B", "Стена_C", "Стена_D", "Потолок", "Пол")).Select 'проверка - пуст лист или нет. Если пуст, то сообщаем If WorksheetFunction.CountA(ActiveSheet.Cells) = 0 Then MsgBox "Лист '" & SheetName & "' пуст! Невозможно его сохранить в PDF!", vbInformation, "Внимание" StartSheet.Select Exit Sub End If