Домашняя страница Undo Do Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Запрет на редактирование, автоматически созданного .doc файл - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, китин  
Запрет на редактирование, автоматически созданного .doc файл
Patron_ilya Дата: Воскресенье, 20.09.2015, 19:33 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Добрый день. Есть связка "таблица Excel"-"шаблон.dot" (во вложении), которая автоматически формирует документы Word по шаблону. Задача чтобы после формирования документа он был недоступен для редактирования. Вопрос - можем ли мы сделать так, чтобы нельзя было редактировать и сам шаблон (файл "шаблон.dot") и готовый, формируемый, документ(ы).
Если нет - то только формируемый документ.

P.S. Предвидя ситуацию, когда невозможно сделать защищенным шаблон вопрос вдогонку - можно ли сделать так, чтобы таблица Excel ссылалась на шаблон не в одной папке с собой (таблицей), а, например, на общий компьютер в локальной сети, доступ в который будет открыт, но для сохранения документы там будут защищены.
Во вложении мои рабочие примеры - заранее спасибо за любую помощь.
К сообщению приложен файл: 17-__.rar (34.3 Kb)
 
Ответить
СообщениеДобрый день. Есть связка "таблица Excel"-"шаблон.dot" (во вложении), которая автоматически формирует документы Word по шаблону. Задача чтобы после формирования документа он был недоступен для редактирования. Вопрос - можем ли мы сделать так, чтобы нельзя было редактировать и сам шаблон (файл "шаблон.dot") и готовый, формируемый, документ(ы).
Если нет - то только формируемый документ.

P.S. Предвидя ситуацию, когда невозможно сделать защищенным шаблон вопрос вдогонку - можно ли сделать так, чтобы таблица Excel ссылалась на шаблон не в одной папке с собой (таблицей), а, например, на общий компьютер в локальной сети, доступ в который будет открыт, но для сохранения документы там будут защищены.
Во вложении мои рабочие примеры - заранее спасибо за любую помощь.

Автор - Patron_ilya
Дата добавления - 20.09.2015 в 19:33
Nic70y Дата: Воскресенье, 20.09.2015, 21:55 | Сообщение № 2
Группа: Друзья
Ранг: Экселист
Сообщений: 9005
Репутация: 2369 ±
Замечаний: 0% ±

Excel 2010
я в Word полный 0 (в Excel = 0,1)
но все же, а если так:
[vba]
Код
    ActiveDocument.Protect Password:="", NoReset:=False, Type:= _
         wdAllowOnlyReading, UseIRM:=False, EnforceStyleLock:=False
[/vba]это рекордер так приказал :(


ЮMoney 41001841029809
 
Ответить
Сообщениея в Word полный 0 (в Excel = 0,1)
но все же, а если так:
[vba]
Код
    ActiveDocument.Protect Password:="", NoReset:=False, Type:= _
         wdAllowOnlyReading, UseIRM:=False, EnforceStyleLock:=False
[/vba]это рекордер так приказал :(

Автор - Nic70y
Дата добавления - 20.09.2015 в 21:55
Patron_ilya Дата: Понедельник, 21.09.2015, 09:27 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Nic70y, Открыл я макрос, и, к сожалению не смог понять куда пробовать вставить данный код, вот код макроса:
[vba]
Код
Const ИмяФайлаШаблона = "шаблон.dot"
Const КоличествоОбрабатываемыхСтолбцов = 35
Const РасширениеСоздаваемыхФайлов = ".doc"

Sub СформироватьДоговоры()
     ПутьШаблона = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаШаблона)
     НоваяПапка = NewFolderName & Application.PathSeparator
     Dim row As Range, pi As New ProgressIndicator
     r = Cells(Rows.Count, "A").End(xlUp).row: rc = r - 2
     If rc < 1 Then MsgBox "Строк для обработки не найдено", vbCritical: Exit Sub

     pi.Show "Формирование договоров": pi.ShowPercents = True: s1 = 10: s2 = 90: p = s1: a = (s2 - s1) / rc
     pi.StartNewAction , s1, "Запуск приложения Microsoft Word"

'    Dim WA As Word.Application, WD As Word.Document: Set WA = New Word.Application    ' c подключением библиотеки Word
'    'Set WA = CreateObject("Word.Application")    ' без подключения библиотеки Word - почему-то замена не производится

     Dim WA As Object, WD As Object ': Set WA = New Word.Application    ' c подключением библиотеки Word
     Set WA = CreateObject("Word.Application")    ' без подключения библиотеки Word - почему-то замена не производится
     For Each row In ActiveSheet.Rows("3:" & r)
         With row
             ФИО = Trim$(.Cells(1)) & " " & Trim$(.Cells(2)) & " " & Trim$(.Cells(6))
             Filename = НоваяПапка & ФИО & РасширениеСоздаваемыхФайлов

             pi.StartNewAction p, p + a / 3, "Создание нового файла на основании шаблона", ФИО
             Set WD = WA.Documents.Add(ПутьШаблона): DoEvents

             pi.StartNewAction p + a / 3, p + a * 2 / 3, "Замена данных ...", ФИО
             For i = 1 To КоличествоОбрабатываемыхСтолбцов
                 FindText = Cells(1, i): ReplaceText = Trim$(.Cells(i))
                 'FindText используем как имя закладки, содержимое которой нужно изменить
                 'При этом из этой переменной удаляем пробелы и фигурные скобки
                 FindText = Replace(FindText, " ", "")
                 FindText = Replace(FindText, "{", "")
                 FindText = Replace(FindText, "}", "")
                 UpdateBookmarks WD, FindText, ReplaceText
                 ' так почему-то заменяет не всё (не затрагивает таблицу)
                 'WA.Selection.Find.Execute FindText, , , , , , , wdFindContinue, False, ReplaceText, True

                 'pi.line3 = "Заменяется " & FindText & " на " & ReplaceText: pi.FP.Repaint: DoEvents
'                With WA.Selection.Find    ' а так всё работает как надо
'                    .Text = FindText
'                    .Replacement.Text = ReplaceText
'                    .Forward = True
'                    .Wrap = wdFindContinue
'                    .Format = False: .MatchCase = False
'                    .MatchWholeWord = False
'                    .MatchWildcards = False
'                    .MatchSoundsLike = False
'                    .MatchAllWordForms = False
'                    .Execute Replace:=wdReplaceAll
'                End With
                 DoEvents
             Next i
             pi.StartNewAction p + a * 2 / 3, p + a, "Сохранение файла ...", ФИО, " "
             WD.Fields.Update 'Обновляем поля в документе
             'сохраняем документ, не добавляя его в список открытых файлов
             WD.SaveAs Filename, AddToRecentFiles:=False: WD.Close False: DoEvents
             p = p + a
         End With
     Next row

     pi.StartNewAction s2, , "Завершение работы приложения Microsoft Word", " ", " "
     WA.Quit False: pi.Hide
     msg = "Сформировано " & rc & " договоров. Все они находятся в папке" & vbNewLine & НоваяПапка
     MsgBox msg, vbInformation, "Готово"
End Sub

'Процедура обновления закладок в документе
Sub UpdateBookmarks(ByVal Doc As Object, ByVal NameOfBookmark As String, ByVal ContentOfBookmark As Variant)
     On Error Resume Next
     Dim rng As Object
     Dim bm As Object
     Set bm = Doc.Bookmarks
     Set rng = bm(NameOfBookmark).Range
     rng.Text = ContentOfBookmark
     bm.Add NameOfBookmark, rng
End Sub

Function NewFolderName() As String
     NewFolderName = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "Договоры, сформированные " & Get_Now)
     MkDir NewFolderName
End Function

Function Get_Date() As String: Get_Date = Replace(Replace(DateValue(Now), "/", "-"), ".", "-"): End Function
Function Get_Time() As String: Get_Time = Replace(TimeValue(Now), ":", "-"): End Function
Function Get_Now() As String: Get_Now = Get_Date & " в " & Get_Time: End Function
[/vba]
Заранее спасибо, просто в данном случае я вообще полный 0 в Excel, а выполнять задачу нужно.
 
Ответить
СообщениеNic70y, Открыл я макрос, и, к сожалению не смог понять куда пробовать вставить данный код, вот код макроса:
[vba]
Код
Const ИмяФайлаШаблона = "шаблон.dot"
Const КоличествоОбрабатываемыхСтолбцов = 35
Const РасширениеСоздаваемыхФайлов = ".doc"

Sub СформироватьДоговоры()
     ПутьШаблона = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаШаблона)
     НоваяПапка = NewFolderName & Application.PathSeparator
     Dim row As Range, pi As New ProgressIndicator
     r = Cells(Rows.Count, "A").End(xlUp).row: rc = r - 2
     If rc < 1 Then MsgBox "Строк для обработки не найдено", vbCritical: Exit Sub

     pi.Show "Формирование договоров": pi.ShowPercents = True: s1 = 10: s2 = 90: p = s1: a = (s2 - s1) / rc
     pi.StartNewAction , s1, "Запуск приложения Microsoft Word"

'    Dim WA As Word.Application, WD As Word.Document: Set WA = New Word.Application    ' c подключением библиотеки Word
'    'Set WA = CreateObject("Word.Application")    ' без подключения библиотеки Word - почему-то замена не производится

     Dim WA As Object, WD As Object ': Set WA = New Word.Application    ' c подключением библиотеки Word
     Set WA = CreateObject("Word.Application")    ' без подключения библиотеки Word - почему-то замена не производится
     For Each row In ActiveSheet.Rows("3:" & r)
         With row
             ФИО = Trim$(.Cells(1)) & " " & Trim$(.Cells(2)) & " " & Trim$(.Cells(6))
             Filename = НоваяПапка & ФИО & РасширениеСоздаваемыхФайлов

             pi.StartNewAction p, p + a / 3, "Создание нового файла на основании шаблона", ФИО
             Set WD = WA.Documents.Add(ПутьШаблона): DoEvents

             pi.StartNewAction p + a / 3, p + a * 2 / 3, "Замена данных ...", ФИО
             For i = 1 To КоличествоОбрабатываемыхСтолбцов
                 FindText = Cells(1, i): ReplaceText = Trim$(.Cells(i))
                 'FindText используем как имя закладки, содержимое которой нужно изменить
                 'При этом из этой переменной удаляем пробелы и фигурные скобки
                 FindText = Replace(FindText, " ", "")
                 FindText = Replace(FindText, "{", "")
                 FindText = Replace(FindText, "}", "")
                 UpdateBookmarks WD, FindText, ReplaceText
                 ' так почему-то заменяет не всё (не затрагивает таблицу)
                 'WA.Selection.Find.Execute FindText, , , , , , , wdFindContinue, False, ReplaceText, True

                 'pi.line3 = "Заменяется " & FindText & " на " & ReplaceText: pi.FP.Repaint: DoEvents
'                With WA.Selection.Find    ' а так всё работает как надо
'                    .Text = FindText
'                    .Replacement.Text = ReplaceText
'                    .Forward = True
'                    .Wrap = wdFindContinue
'                    .Format = False: .MatchCase = False
'                    .MatchWholeWord = False
'                    .MatchWildcards = False
'                    .MatchSoundsLike = False
'                    .MatchAllWordForms = False
'                    .Execute Replace:=wdReplaceAll
'                End With
                 DoEvents
             Next i
             pi.StartNewAction p + a * 2 / 3, p + a, "Сохранение файла ...", ФИО, " "
             WD.Fields.Update 'Обновляем поля в документе
             'сохраняем документ, не добавляя его в список открытых файлов
             WD.SaveAs Filename, AddToRecentFiles:=False: WD.Close False: DoEvents
             p = p + a
         End With
     Next row

     pi.StartNewAction s2, , "Завершение работы приложения Microsoft Word", " ", " "
     WA.Quit False: pi.Hide
     msg = "Сформировано " & rc & " договоров. Все они находятся в папке" & vbNewLine & НоваяПапка
     MsgBox msg, vbInformation, "Готово"
End Sub

'Процедура обновления закладок в документе
Sub UpdateBookmarks(ByVal Doc As Object, ByVal NameOfBookmark As String, ByVal ContentOfBookmark As Variant)
     On Error Resume Next
     Dim rng As Object
     Dim bm As Object
     Set bm = Doc.Bookmarks
     Set rng = bm(NameOfBookmark).Range
     rng.Text = ContentOfBookmark
     bm.Add NameOfBookmark, rng
End Sub

Function NewFolderName() As String
     NewFolderName = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "Договоры, сформированные " & Get_Now)
     MkDir NewFolderName
End Function

Function Get_Date() As String: Get_Date = Replace(Replace(DateValue(Now), "/", "-"), ".", "-"): End Function
Function Get_Time() As String: Get_Time = Replace(TimeValue(Now), ":", "-"): End Function
Function Get_Now() As String: Get_Now = Get_Date & " в " & Get_Time: End Function
[/vba]
Заранее спасибо, просто в данном случае я вообще полный 0 в Excel, а выполнять задачу нужно.

Автор - Patron_ilya
Дата добавления - 21.09.2015 в 09:27
Nic70y Дата: Понедельник, 21.09.2015, 09:40 | Сообщение № 4
Группа: Друзья
Ранг: Экселист
Сообщений: 9005
Репутация: 2369 ±
Замечаний: 0% ±

Excel 2010
У меня Ваш макрос вызывает кучу ошибок. :(
подождем реальных спецов


ЮMoney 41001841029809
 
Ответить
СообщениеУ меня Ваш макрос вызывает кучу ошибок. :(
подождем реальных спецов

Автор - Nic70y
Дата добавления - 21.09.2015 в 09:40
Patron_ilya Дата: Понедельник, 21.09.2015, 10:30 | Сообщение № 5
Группа: Пользователи
Ранг: Прохожий
Сообщений: 5
Репутация: 0 ±
Замечаний: 0% ±

Excel 2013
Nic70y, "Мопед не мой" (с)
Кстати, если скачать связку из первого поста - там по нажатию желтой кнопки макроса все работает.
В общем да, было бы здорово услышать мнение профессионалов.
 
Ответить
СообщениеNic70y, "Мопед не мой" (с)
Кстати, если скачать связку из первого поста - там по нажатию желтой кнопки макроса все работает.
В общем да, было бы здорово услышать мнение профессионалов.

Автор - Patron_ilya
Дата добавления - 21.09.2015 в 10:30
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!