Страницы: 1 2 След.
RSS
Создание формы ввода (!)
 
Здравствуйте! Нет, мне не лень поикать на форуме. Но единственная страничка, где видимо находилась такая же проблема, наверное удалена, поскольку не открывается (хоть ссылок на неё очень много). В других темах, обсуждаются уже высшие материи, а мне нужно с начала.  
Извините, за вступление... :-)  
 
Не смог я понять -- как сделать форму, как она помещает данные в нужные (указываемые пользователем в коде) ячейки, и какими макросами это всё описывается.  
Помогите пожалуйста.  
Образец с пожеланиями. приложен.  
 
Спасибо большое за то, что Вы есть!
 
К сожалению, я не понял, какое событие должно запускать макрос, поэтому пока определил его на кнопку. Про событие - можно подробнее?
 
Спасибо за оперативный ответ!  
Сейчас буду смотреть...  
А событие простое: ячейка (текст) примет соответствующее значение, что и запустит макрос (при его наличии).  
С уважением, К.
 
{quote}{login=Konstanta}{date=19.03.2010 05:06}{thema=Создание формы ввода (!)}{post}Спасибо за оперативный ответ!  
Сейчас буду смотреть...  
А событие простое: ячейка (текст) примет соответствующее значение, что и запустит макрос (при его наличии).  
С уважением, К.{/post}{/quote}  
 
а там одна ячейка ссылается на другую. Напишите, какая ячейка нужна
 
Спасибо! Работает :).  
Вопрос избитый уже, Я думал, что изменив название формы с User Form, на "аполнение" я увижу это название в шапке формы. А там по прежнему "User Form".  
Где его поменять?
 
{quote}{login=Konstanta}{date=19.03.2010 05:11}{thema=Создание формы ввода (!)}{post}Спасибо! Работает :).  
Вопрос избитый уже, Я думал, что изменив название формы с User Form, на "аполнение" я увижу это название в шапке формы. А там по прежнему "User Form".  
Где его поменять?{/post}{/quote}  
свойство формы Caption
 
Нижняя ячейка. В ней формула, ссылающаяся на другую ячейку.  
Форма должна появится когда в ячейке с влияющим значением будет "Снежинка".  
В принципе не важно какую Вы укажете. Важно, чтобы я увидел в коде, как Вы это сделали...  
 
Спасибо ещё раз!
 
Private Sub Worksheet_Change(ByVal Target As Range)  
   If Range("D2") = "Снежинка" Then Заполнение.Show  
End Sub  
 
вставьте этот код в модуль Лист1 - при появлении в ячейке D2 слова Снежинка (текст или по ссылке) - будет запускаться форма
 
тогда d4
 
Проблема решена!  
 
Благодарю Вас, webley!  
 
Вы здорово мне помогли!
 
не за что
 
Добрый день webley!  
 
Я успешно применил Ваш код. Но есть два вопроса:  
1) У меня перестало работать ограничение на не заполненные поля.  
2) Я добавит пятый текстбокс и теперь через него перескакивает активация сразу после четвёртого поля, на ОК кнопку.  
Как это исправить?  
Вот код:  
Private Sub CommandButton1_Click()  
   Sheets("Экспорт").Cells(2, 17) = Me.TextBox1 'ставим значения из текстовых полей в соответствующие ячейки  
   Sheets("Экспорт").Cells(2, 15) = Me.TextBox2  
   Sheets("Экспорт").Cells(2, 13) = Me.TextBox3  
   Sheets("Экспорт").Cells(2, 9) = Me.TextBox4  
   Sheets("Экспорт").Cells(2, 5) = Me.TextBox5  
   Unload Me 'выгружаем форму  
End Sub  
 
Private Sub TextBox1_Change()  
   If TextBox1 <> "" Then  
       TextBox2.Enabled = True  
   Else  
       TextBox2.Enabled = False  
       TextBox3.Enabled = False  
       TextBox4.Enabled = False  
       TextBox5.Enabled = False  
       CommandButton1.Enabled = False  
   End If  
End Sub  
 
Private Sub TextBox2_Change()  
   If TextBox2 <> "" Then  
       TextBox3.Enabled = True  
   Else  
       TextBox3.Enabled = False  
       TextBox4.Enabled = False  
       TextBox5.Enabled = False  
       CommandButton1.Enabled = False  
   End If  
End Sub  
 
Private Sub TextBox3_Change()  
   If TextBox3 <> "" Then  
       TextBox4.Enabled = True  
   Else  
       TextBox4.Enabled = False  
       TextBox5.Enabled = False  
       CommandButton1.Enabled = False  
   End If  
End Sub  
 
Private Sub TextBox4_Change()  
   If TextBox4 <> "" Then  
       TextBox5.Enabled = True  
   Else  
       TextBox5.Enabled = False  
       CommandButton1.Enabled = False  
   End If  
End Sub  
Private Sub TextBox5_Change()  
   If TextBox5 <> "" Then  
   Else  
       CommandButton1.Enabled = False  
   End If  
End Sub  
 
Где ошибка? Я не смог найти...
 
Постараюсь объяснить какая вообще была логика. Во первых, у всех полей (кроме первого) и у кнопки по умолчанию стояло свойство Enabled = False (соответственно, при добавлении нового поля надо это свойство также изменить). Другими словами, изначально можно изменить текст только в первом поле. При заполнении этого поля происходит проверка - если значение стало не равным "", то изменяется свойство Enabled у следующего поля, и так пока не дойдем до последнего. При заполнении последнего поля меняется свойство Enabled у кнопки. Кстати, в прикрепленном коде это как раз пропущено, должно быть так:  
Private Sub TextBox5_Change()  
If TextBox5 <> "" Then  
CommandButton1.Enabled = True  
Else  
CommandButton1.Enabled = False  
End If  
End Sub  
 
В случае, если при изменении очередного поля его значение стало равным "" (т.е. из него стерли текст), то свойство Enabled у всех последующих элементов становится False  
 
Что касается перехода по Tab - у каждого элемента есть свойство TabIndex, которое и определяет порядок выделения элементов. Поскольку пятое поле было добавлено самым последним, то и индекс у него последний. Поставьте для полей индексы от 0 до 4, а для кнопки - 5. В этом случае переход будет осуществляться правильно.  
 
Может быть немного запутано написал - если появятся вопросы всегда готов ответить
 
Ещё по поводу переходов: правый клик на форме - Tab Order. И выбираем нужный порядок переходов.
 
{quote}{login=Юрий М}{date=21.03.2010 03:22}{thema=}{post}Ещё по поводу переходов: правый клик на форме - Tab Order. И выбираем нужный порядок переходов.{/post}{/quote}  
 
Не знал - спасибо
 
Я тоже не знал :-) (ещё бы я знал...)  
Теперь знаю и с переходом всё нормально.  
Но проблема с активностью полей не решилась.  
Я подумал, что может быть ячейки не пустые, поэтому поля активны.  
При сравнении кода я не увидел разницы.    
Посмотрите пожалуйста ещё раз:  
Вот Ваш код для текст бокса1: Private Sub TextBox1_Change()  
   If TextBox1 <> "" Then  
       TextBox2.Enabled = True  
   Else  
       TextBox2.Enabled = False  
       TextBox3.Enabled = False  
       TextBox4.Enabled = False  
       CommandButton1.Enabled = False  
   End If  
End Sub  
 
Вот мой код для текстбокса 1:    
Private Sub TextBox1_Change()  
   If TextBox1 <> "" Then  
       TextBox2.Enabled = True  
   Else  
       TextBox2.Enabled = False  
       TextBox3.Enabled = False  
       TextBox4.Enabled = False  
       TextBox5.Enabled = False  
       CommandButton1.Enabled = False  
   End If  
End Sub  
У меня только добавлен  TextBox5. с теми же параметрами как у Вас.  
Но, при пустых полях все ячейки активны, включая кнопку ОК
 
Забыл добавить важное: при этом Ваша форма работает так как нужно (при пустых полях последующие боксы не активны) а у меня (почему-то) не работает (все активны)...  
 
Спасибо!
 
{quote}{login=Konstanta}{date=22.03.2010 12:50}{thema=}{post}Забыл добавить важное: при этом Ваша форма работает так как нужно (при пустых полях последующие боксы не активны) а у меня (почему-то) не работает (все активны)...  
 
Спасибо!{/post}{/quote}  
 
А файл можете показать?
 
Приветствую Вас webley!  
Да могу. У меня 2007 MS подойдёт?
 
На работе почему-то эта страница не открывается. Пишет, что не может открыть....  
Странно.
 
Здравствуйте webley!  
 
Вот файлик:  
Спасибо, что возитесь со мной...
 
{quote}{login=Konstanta}{date=22.03.2010 07:26}{thema=Заполнение формы}{post}На работе почему-то эта страница не открывается. Пишет, что не может открыть....  
Странно.{/post}{/quote}  
На работе почистите куки в обозревателе.
 
Благодарю Юрий М!  
 
Я бы сам не додумался... Это так просто.
 
{quote}{login=Konstanta}{date=22.03.2010 07:24}{thema=}{post}Приветствую Вас webley!  
Да могу. У меня 2007 MS подойдёт?{/post}{/quote}  
 
Дома у меня только 2003 :(  
Посмотреть смогу только завтра на работе...
 
{quote}{login=Konstanta}{date=22.03.2010 07:58}{thema=Заполнение формы}{post}Здравствуйте webley!  
 
Вот файлик:  
Спасибо, что возитесь со мной...{/post}{/quote}  
 
А какой пароль на код VBA? 123 не подходит...  
Насколько я могу судить по внешнему виду формы, по умолчанию у всех элементов свойство Enabled имеет значение True, а должно быть False у всех, кроме первого TextBox
 
{quote}{login=webley}{date=19.03.2010 05:15}{thema=}{post}Private Sub Worksheet_Change(ByVal Target As Range)  
   If Range("D2") = "Снежинка" Then Заполнение.Show  
End Sub  
 
вставьте этот код в модуль Лист1 - при появлении в ячейке D2 слова Снежинка (текст или по ссылке) - будет запускаться форма{/post}{/quote}  
Работает при любом изменении листа при наличии в D2 слова "Снежинка".
 
{quote}{login=vikttur}{date=23.03.2010 08:43}{thema=Re: }{post}{quote}{login=webley}{date=19.03.2010 05:15}{thema=}{post}Private Sub Worksheet_Change(ByVal Target As Range)  
   If Range("D2") = "Снежинка" Then Заполнение.Show  
End Sub  
 
вставьте этот код в модуль Лист1 - при появлении в ячейке D2 слова Снежинка (текст или по ссылке) - будет запускаться форма{/post}{/quote}  
Работает при любом изменении листа при наличии в D2 слова "Снежинка".{/post}{/quote}  
 
Пожалуй...  
Тогда можно так:    
Private Sub Worksheet_SelectionChange(ByVal Target As Range)  
   If Target = Range("D2") And Range("D2") = "Снежинка" Then Заполнение.Show  
End Sub
 
Приветствую Вас webley!  
Я вроде поменял пароль на 123  
Попробуйте старый "29559"
 
По поводу заблокированных полей и кнопки я уже написал - скорее всего так и есть: в свойствах элементов надо установить свойство Enable=False. Код TextBox1_Change() отслеживает изменение в соответствующем поле, а вам надо что бы изначально поля были заблокированы (кстати, попробуйте ввести в первое поле вашей формы какой-нибудь текст, а потом стереть его - другие поля и кнопки заблокируются, т.е. код работает).  
 
По вопросу проверки на числа - я определил эту проверку на нажатие кнопки (см. прикрепленый файл). Для того чтобы проверка работала правильно, надо в код каждого поля добавить строчку TextBox1 = Replace(TextBox1, ".", ","):  
Private Sub TextBox1_Change()  
   If TextBox1 <> "" Then  
       TextBox1 = Replace(TextBox1, ".", ",")  
       TextBox2.Enabled = True  
   Else  
       TextBox2.Enabled = False  
       TextBox3.Enabled = False  
       TextBox4.Enabled = False  
       CommandButton1.Enabled = False  
   End If  
End Sub  
 
Нужно это для того, чтобы при вводе точки менялись на запятые, т.к. функция IsNumeric() в качестве разделителя дробной части числа воспринимает только запятую (по крайней мере у меня, может быть зависит от настроек)  
 
По вопросу защиты листа - я пас, пока не приходилось сталкиваться
 
Да, этот пароль подошел.  
Сделал то же самое на вашем файле
Страницы: 1 2 След.
Читают тему
Наверх