AKBA
Junior Member | Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Код: Private Sub CommandButton1_Click() Dim lNumber As Long Dim i As Long 'Помещаем в переменную lNumber, с какого номера 'должна начинаться нумерация бланков. lNumber = Me.TextBox1.Value 'проверяем на согласие с условием If CheckBox1.Value = False Then 'выводим сообщение MsgBox "Ошибка!" & " " & "Необходимо принять условие." Else 'Делаем столько витков цикла, сколько бланков необходимо вывести на печать. For i = 1 To Me.TextBox2.Value Step 1 Dim oDoc As Document Set oDoc = Application.Documents.Add("C:\Primer\BLANK.docm") 'Помещаем в закладку "bN_1" данные из переменной lNumber. oDoc.Bookmarks("bN_1").Range.Text = lNumber + (i - 1) 'Помещаем в закладку "bN_2" данные из переменной lNumber. oDoc.Bookmarks("bN_2").Range.Text = lNumber + (i - 1) 'Помещаем в закладку "bN_3" данные из переменной lNumber. oDoc.Bookmarks("bN_3").Range.Text = lNumber + (i - 1) 'Помещаем в закладку "bN_4" данные из переменной lNumber. oDoc.Bookmarks("bN_4").Range.Text = lNumber + (i - 1) 'Распечатываем. Application.PrintOut Range:=wdPrintAllDocument, Item:= _ wdPrintDocumentContent, Copies:=1, Pages:="", PageType:=wdPrintAllPages, _ ManualDuplexPrint:=True, Collate:=True, Background:=True, PrintToFile:= _ False, PrintZoomColumn:=0, PrintZoomRow:=0, PrintZoomPaperWidth:=0, _ PrintZoomPaperHeight:=0 'Скрываем пользовательскую форму UserForm1.Hide Next i End If End Sub | Здесь представлен работающий код, теперь уже с пользовательской формой (в которой TextBox1 и TextBox2 для ввода значений, CheckBox1 для принятия условия, а также кнопка CommandButton1, которая является основной). По-прежнему есть некоторые моменты, которые хотелось бы улучшить: 1 - в документе "BLANK.docm", над которым и проводятся все действия, имеется 4 закладки на 4 одинаковых числа, которые начинаются с цифры "ноль". Например, 012222. Так вот сейчас я вынужден был перед каждой закладкой поместить цифру "ноль",а в поле TextBox1 пользовательской формы UserForm1 вбивать значение без цифры "ноль", например 12222. Можно ли сделать так, чтобы в поле TextBox1 я вносил значение например 012222, в поле TextBox2 я вносил значение например 2 и при этом происходила правильная отработка "lNumber + (i - 1)" и на печать выводились документы с изменёнными номерами - 012222 в первом документе и 012223 во втором документе? 2 - во время выполнения кода открываются новые вкладки с документами, с изменёнными номерами. Как избавиться от этого, чтобы ничего не появлялось, а просто в очередь печати все документы складывались сразу и всё? 3 - необходима двусторонняя печать документа "BLANK.docm". Принтер обладает необходимой функцией. Добавлено: по пункту 2 родилась вот какая идея Код: 'закрываем активный документ без сохранения изменений, поскольку после вставки 'текста произошла замена закладки ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges | правильно? или есть другой, болеее правильный вариант? и ещё появились следующие вопросы (сохранена сквозная нумерация проблем): 4 - текст, вводимый в TextBox1, должен проверяться на следующие условия - это должно быть число, число должно состоять из 5 цифр, и не должно начинаться на ноль. 5 - текст, вводимый в TextBox2, должен проверяться на следующие условия - это должно быть число равное "1", "2" или "50". |