Всем привет. Ребят может подскажете идейку что можно сделать. В общем ситуация такая: Есть лист со списком паспортов, на листе сделано 5 кнопок, одна из них печать паспорта, при нажатии печать открывается созданный ранее шаблон(шаблон для каждого вида паспорта свой), в него выгружаются данные из таблицы, и он сразу преобразуется в пдф(чтобы нельзя было редактировать). Далее Пдф сохраняется в отдельную папку, где хранятся все ПДФки.Если нужно просмотреть ранее созданный паспорт, работники его выбирают в списке паспортов нажимают печать и смотрят ПДФку, так вот беда в чем: часто меняются Госты, и их меняю непосредственно в шаблоне, и получается так, что при открытии старого паспорта уже формируется файлик с новыми гостами, а нада что бы были те которые были при оформлении!Я даже не представляю что можно придумать, мб идейку подкинете?) Расписал как мог) может конечно и немного непонятно)
Всем привет. Ребят может подскажете идейку что можно сделать. В общем ситуация такая: Есть лист со списком паспортов, на листе сделано 5 кнопок, одна из них печать паспорта, при нажатии печать открывается созданный ранее шаблон(шаблон для каждого вида паспорта свой), в него выгружаются данные из таблицы, и он сразу преобразуется в пдф(чтобы нельзя было редактировать). Далее Пдф сохраняется в отдельную папку, где хранятся все ПДФки.Если нужно просмотреть ранее созданный паспорт, работники его выбирают в списке паспортов нажимают печать и смотрят ПДФку, так вот беда в чем: часто меняются Госты, и их меняю непосредственно в шаблоне, и получается так, что при открытии старого паспорта уже формируется файлик с новыми гостами, а нада что бы были те которые были при оформлении!Я даже не представляю что можно придумать, мб идейку подкинете?) Расписал как мог) может конечно и немного непонятно)Espada
Можно придумать так - проверяете наличие файла - если такой есть, то не формируете новый, а открываете уже созданный. Ну а если нужно перезаписать - где-то ставите незаметную кнопку "обновить pdf" с кучей проверок-подтверждений по дороге к результату.
Можно придумать так - проверяете наличие файла - если такой есть, то не формируете новый, а открываете уже созданный. Ну а если нужно перезаписать - где-то ставите незаметную кнопку "обновить pdf" с кучей проверок-подтверждений по дороге к результату.Hugo
Можно придумать так - проверяете наличие файла - если такой есть, то не формируете новый, а открываете уже созданный. Ну а если нужно перезаписать - где-то ставите незаметную кнопку "обновить pdf" с кучей проверок-подтверждений по дороге к результату.
Вариант конечно такой обдумывал, но у нас за небольшое количество времени уже 8тысяч записей, т.е необходимо минимум 8тыс ПДФак, а это будет ещё расти и расти. Вариант рабочий но, я его оставлял на крайний случай
Можно придумать так - проверяете наличие файла - если такой есть, то не формируете новый, а открываете уже созданный. Ну а если нужно перезаписать - где-то ставите незаметную кнопку "обновить pdf" с кучей проверок-подтверждений по дороге к результату.
Вариант конечно такой обдумывал, но у нас за небольшое количество времени уже 8тысяч записей, т.е необходимо минимум 8тыс ПДФак, а это будет ещё расти и расти. Вариант рабочий но, я его оставлял на крайний случайEspada
Дело в том, что проверять-то не нужно. Нужно просто запустить команду "Открыть файл вввв.пдф". Если откроет, значит, такой файл есть и все нормально, а если макрос даст ошибку, то такого файла нет и, следовательно, его нужно создать.
Дело в том, что проверять-то не нужно. Нужно просто запустить команду "Открыть файл вввв.пдф". Если откроет, значит, такой файл есть и все нормально, а если макрос даст ошибку, то такого файла нет и, следовательно, его нужно создать._Boroda_
Дело в том, что проверять-то не нужно. Нужно просто запустить команду "Открыть файл вввв.пдф". Если откроет, значит, такой файл есть и все нормально, а если макрос даст ошибку, то такого файла нет и, следовательно, его нужно создать.
Это не подойдёт, ладно если бы мне или коллегам это нада было, то ясно что раз ошибка значит новый создаём, а так этим журналом пользуются Люди не очень хорошо разбираются в компе, и показали что тыкать и всё, а если не дай бог ошибка сразу звонки нам.
Всё таки обсудили и решили выделить на сервере место и сделать каталог из файлов пдф. можно-ли при нажатии на печать сделать проверку на существование файла, и если он есть сразу открыть его, а если нет, то создать новый?
Дело в том, что проверять-то не нужно. Нужно просто запустить команду "Открыть файл вввв.пдф". Если откроет, значит, такой файл есть и все нормально, а если макрос даст ошибку, то такого файла нет и, следовательно, его нужно создать.
Это не подойдёт, ладно если бы мне или коллегам это нада было, то ясно что раз ошибка значит новый создаём, а так этим журналом пользуются Люди не очень хорошо разбираются в компе, и показали что тыкать и всё, а если не дай бог ошибка сразу звонки нам.
Всё таки обсудили и решили выделить на сервере место и сделать каталог из файлов пдф. можно-ли при нажатии на печать сделать проверку на существование файла, и если он есть сразу открыть его, а если нет, то создать новый?Espada
Option Explicit Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim myShell As Object: Set myShell = CreateObject("WScript.Shell") Err.Clear: On Error Resume Next myShell.Run "C:\123.pdf" If Err.Number = 0 Then Cancel = True Exit Sub End If 'Дале ваш макрос по созданию новой ПДФ End Sub
[/vba] Вместо "C:\123.pdf" прописываете переменную в которой храниться имя нужного файла
В модуль книги [vba]
Код
Option Explicit Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim myShell As Object: Set myShell = CreateObject("WScript.Shell") Err.Clear: On Error Resume Next myShell.Run "C:\123.pdf" If Err.Number = 0 Then Cancel = True Exit Sub End If 'Дале ваш макрос по созданию новой ПДФ End Sub
[/vba] Вместо "C:\123.pdf" прописываете переменную в которой храниться имя нужного файлаPoltava
Сообщение отредактировал Poltava - Пятница, 04.10.2013, 16:00
Не хочет чего-то у меня работать( Вот как получилось: [vba]
Код
Option Explicit Public R As Integer Public C As Integer
'печать паспорта Sub Кнопка2_Щелчок() 'ПЕЧАТЬ ПАСПОРТА ВЫБРАННОЙ ПАРТИИ 'открыть файл паспорта соответствуюшего ЛКМ Dim vПутьКПапке As String Dim Name_File As String Dim Name As String Dim part As Variant Dim pasp As Variant Dim Mass As Variant Dim myShell As Object: Set myShell = CreateObject("WScript.Shell") Dim dataName$ Dim prName$
' определяем координаты активной ячейки журнала R = ActiveCell.Row C = ActiveCell.Column ' DataName и prName переменные имени пдф dataName = Workbooks("Журнал контроля техпроцесса(ВОДНЫЕ).xlsm").Sheets(1).Cells(R, 1).Value prName = Workbooks("Журнал контроля техпроцесса(ВОДНЫЕ).xlsm").Sheets(1).Cells(R, 4).Value
'MsgBox "R= " & R & " " & "C= " & C ' поместим значения координат акт. ячейки на лист "settings" Workbooks("Журнал контроля техпроцесса(ВОДНЫЕ).xlsm").Sheets(4).Cells(1, 1).Value = R Workbooks("Журнал контроля техпроцесса(ВОДНЫЕ).xlsm").Sheets(4).Cells(2, 1).Value = C If R = 1 Or R = 2 Then MsgBox "Установите курсор в строку с данными партии, паспорт которой Вы хотите печатать." Exit Sub End If Err.Clear On Error Resume Next myShell.Run "Z:\IT-отдел\alexei\ОТК\ВОДНЫЕ\BazaPDF\" & dataName + " " + prName & ".pdf" If Err.Number = 0 Then Exit Sub End If
' присвоим переменной Name_File значение имени файла паспорта Name = Sheets(1).Cells(R, 4).Value pasp = Sheets(1).Cells(R, 2).Value part = Sheets(1).Cells(R, 3).Value Mass = Sheets(1).Cells(R, 7).Value Name_File = "ПК_" & Sheets(1).Cells(R, 4).Value Dim nVar As Integer nVar = MsgBox("Вы уверены, что Вам нужен парпорт № " & pasp & " партии № " & part & " на " & Name & " ?", 65, "Последнее китайское предупреждение") ' если нажата кнопка ОК, то открываем файл по заданному пути и имени. Иначе ничего. If nVar = 1 Then vПутьКПапке = "z:\IT-отдел\alexei\ОТК\ВОДНЫЕ\ПАСПОРТА2\" Workbooks.Open vПутьКПапке & "\" & Name_File & ".xlsm" End If End Sub
[/vba] [moder]Зачем цитировать пост целиком? Можно отвечать и без цитирования[/moder]
Не хочет чего-то у меня работать( Вот как получилось: [vba]
Код
Option Explicit Public R As Integer Public C As Integer
'печать паспорта Sub Кнопка2_Щелчок() 'ПЕЧАТЬ ПАСПОРТА ВЫБРАННОЙ ПАРТИИ 'открыть файл паспорта соответствуюшего ЛКМ Dim vПутьКПапке As String Dim Name_File As String Dim Name As String Dim part As Variant Dim pasp As Variant Dim Mass As Variant Dim myShell As Object: Set myShell = CreateObject("WScript.Shell") Dim dataName$ Dim prName$
' определяем координаты активной ячейки журнала R = ActiveCell.Row C = ActiveCell.Column ' DataName и prName переменные имени пдф dataName = Workbooks("Журнал контроля техпроцесса(ВОДНЫЕ).xlsm").Sheets(1).Cells(R, 1).Value prName = Workbooks("Журнал контроля техпроцесса(ВОДНЫЕ).xlsm").Sheets(1).Cells(R, 4).Value
'MsgBox "R= " & R & " " & "C= " & C ' поместим значения координат акт. ячейки на лист "settings" Workbooks("Журнал контроля техпроцесса(ВОДНЫЕ).xlsm").Sheets(4).Cells(1, 1).Value = R Workbooks("Журнал контроля техпроцесса(ВОДНЫЕ).xlsm").Sheets(4).Cells(2, 1).Value = C If R = 1 Or R = 2 Then MsgBox "Установите курсор в строку с данными партии, паспорт которой Вы хотите печатать." Exit Sub End If Err.Clear On Error Resume Next myShell.Run "Z:\IT-отдел\alexei\ОТК\ВОДНЫЕ\BazaPDF\" & dataName + " " + prName & ".pdf" If Err.Number = 0 Then Exit Sub End If
' присвоим переменной Name_File значение имени файла паспорта Name = Sheets(1).Cells(R, 4).Value pasp = Sheets(1).Cells(R, 2).Value part = Sheets(1).Cells(R, 3).Value Mass = Sheets(1).Cells(R, 7).Value Name_File = "ПК_" & Sheets(1).Cells(R, 4).Value Dim nVar As Integer nVar = MsgBox("Вы уверены, что Вам нужен парпорт № " & pasp & " партии № " & part & " на " & Name & " ?", 65, "Последнее китайское предупреждение") ' если нажата кнопка ОК, то открываем файл по заданному пути и имени. Иначе ничего. If nVar = 1 Then vПутьКПапке = "z:\IT-отдел\alexei\ОТК\ВОДНЫЕ\ПАСПОРТА2\" Workbooks.Open vПутьКПапке & "\" & Name_File & ".xlsm" End If End Sub
[/vba] [moder]Зачем цитировать пост целиком? Можно отвечать и без цитирования[/moder]Espada
А Вы собственно пытались понять логику макроса???[vba]
Код
myShell.Run ..........
[/vba]Этот код пытается открыть файл, и если файл открыт то прекращает работу макроса, а дальше уже должен идти код который должен выполнять действия при отсутствии файла то есть формировать новый пдф паспорт. У вас же после попытки открыть пдф идет вопрос о том действительно ли Вы хотите открыть паспорт и попытка открыть хlmx файл. Вы бы попробовали понять логику и тогда вопросы у вас исчезнут. PS: После отключения обработчика ошибок On Error Resume Next следует обратно его включить On Error Goto 0 после того как вы перехватили нужную ошибку
А Вы собственно пытались понять логику макроса???[vba]
Код
myShell.Run ..........
[/vba]Этот код пытается открыть файл, и если файл открыт то прекращает работу макроса, а дальше уже должен идти код который должен выполнять действия при отсутствии файла то есть формировать новый пдф паспорт. У вас же после попытки открыть пдф идет вопрос о том действительно ли Вы хотите открыть паспорт и попытка открыть хlmx файл. Вы бы попробовали понять логику и тогда вопросы у вас исчезнут. PS: После отключения обработчика ошибок On Error Resume Next следует обратно его включить On Error Goto 0 после того как вы перехватили нужную ошибкуPoltava
Сообщение отредактировал Poltava - Пятница, 04.10.2013, 18:05
Да я представляю, как он должен работать. При нажатии кнопки печать идёт проверка на существование ПДФ документа, с необходимым именем, если документ есть, то открывается ранее созданная ПДФка, а если нет то, открывается новый екселевский шаблон и в него вносятся данные. В старом макросе понятно, что при нажатии ок откроется файл по заданному пути и имени[vba]
Код
If nVar = 1 Then vПутьКПапке = "z:\IT-отдел\alexei\ОТК\ВОДНЫЕ\ПАСПОРТА2\" 'vПутьКПапке = "C:\downloads\1\ВОДНЫЕ\ПАСПОРТА готовые (водные)" 'vПутьКПапке = "G:\ОТК\ВОДНЫЕ\ПАСПОРТА готовые (водные)" Workbooks.Open vПутьКПапке & "\" & Name_File & ".xlsm" End If
[/vba]
а пристроить к нему то, что нужно [vba]
Код
Option Explicit Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim myShell As Object: Set myShell = CreateObject("WScript.Shell") Err.Clear: On Error Resume Next myShell.Run "C:\123.pdf" If Err.Number = 0 Then Cancel = True Exit Sub End If 'Дале ваш макрос по созданию новой ПДФ End Sub
Да я представляю, как он должен работать. При нажатии кнопки печать идёт проверка на существование ПДФ документа, с необходимым именем, если документ есть, то открывается ранее созданная ПДФка, а если нет то, открывается новый екселевский шаблон и в него вносятся данные. В старом макросе понятно, что при нажатии ок откроется файл по заданному пути и имени[vba]
Код
If nVar = 1 Then vПутьКПапке = "z:\IT-отдел\alexei\ОТК\ВОДНЫЕ\ПАСПОРТА2\" 'vПутьКПапке = "C:\downloads\1\ВОДНЫЕ\ПАСПОРТА готовые (водные)" 'vПутьКПапке = "G:\ОТК\ВОДНЫЕ\ПАСПОРТА готовые (водные)" Workbooks.Open vПутьКПапке & "\" & Name_File & ".xlsm" End If
[/vba]
а пристроить к нему то, что нужно [vba]
Код
Option Explicit Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim myShell As Object: Set myShell = CreateObject("WScript.Shell") Err.Clear: On Error Resume Next myShell.Run "C:\123.pdf" If Err.Number = 0 Then Cancel = True Exit Sub End If 'Дале ваш макрос по созданию новой ПДФ End Sub
If nVar = 1 Then Dim myShell As Object: Set myShell = CreateObject("WScript.Shell") Err.Clear: On Error Resume Next myShell.Run "ПеременнаяСодержащаяПутьКПДФФайлуПаспорта" If Err.Number = 0 Then Exit Sub On Error GoTo 0
Err.Clear: On Error Resume Next myShell.Run ПеременнаяСодержащаяПутьПДФФайлуПаспорта If Err.Number = 0 Then MsgBox "При открытии PDF возникли ошибки, Файл неоткрыт" On Error GoTo 0 End If
[/vba]
Ну как то так
[vba]
Код
If nVar = 1 Then Dim myShell As Object: Set myShell = CreateObject("WScript.Shell") Err.Clear: On Error Resume Next myShell.Run "ПеременнаяСодержащаяПутьКПДФФайлуПаспорта" If Err.Number = 0 Then Exit Sub On Error GoTo 0
Err.Clear: On Error Resume Next myShell.Run ПеременнаяСодержащаяПутьПДФФайлуПаспорта If Err.Number = 0 Then MsgBox "При открытии PDF возникли ошибки, Файл неоткрыт" On Error GoTo 0 End If