Пишу небольшую прогу по учету посещаемости.Please, Help Me!

Программирование на Visual Basic for Applications
Bahus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 31.07.2006 (Пн) 12:13
Откуда: Беларусь

Пишу небольшую прогу по учету посещаемости.Please, Help Me!

Сообщение Bahus » 01.08.2006 (Вт) 14:50

У меня три трабла:
1)При загрузке и открытии UserForm в Text(List/Combo)Box данные с листа .xls догружаются только после повторного открытия. Для привязки использую методы For-Next и With-AddItem-End With.
2)И еще. Есть ли програмный аналог екселевского автофильтра. Мне из общего списка не обходимо выбрать определенные значения (напрмер Имя Фамилия ученика(они в одной ячейке). Я сначале рекордером записал, а вместо фиксированного значения поставил значение из ComboBox формы, но если на листе Ctrl+Shift+End и Ctrl+C виделяют и копируют выбранное фильтром, то код копирует все.В последнем собственно и проблема, так то все работает, но выделенное на отдельный лист не копирует.
3)И последнее. Надо сделать отчет по периодам, автофильтр при работе с датами на больше меньше не реагирует (формат ДД.ММ.ГГГГ).
Тип отчета "с"..."по". Тут даже не знаю с чего подступиться.
Очень прошу помочь.

Bahus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 31.07.2006 (Пн) 12:13
Откуда: Беларусь

Сообщение Bahus » 03.08.2006 (Чт) 9:28

C фильтром(кроме дат) и загрузкой разобрался. Подскажите, если способ сохранения экселевского листа отдельным документом Ворд, что-нибудь по проще чем создать документ/скопировать лист в него и сохранить документ. Оч длинно получается.

Bahus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 31.07.2006 (Пн) 12:13
Откуда: Беларусь

Сообщение Bahus » 07.08.2006 (Пн) 9:40

Короче, пока, млин, ждал хоть от кого-нибудь ответа, со всем разобрался сам. Не знаю, насколько мое решение верное и быстрое, но что касается обработки периода, то сделал так.
При записи данных в БД в последний столбец из даты записи формулой извлекается чиловое значение даты (ДАТАЗНАЧ), в две свободных ячейки из TextBox'ов с датами выгружал даты, с помощью все той же ДАТАЗНАЧ извлекал их числовое значение в еще две соседние ячейки, а значение этих ячеек ввел в код как переменную и добавил в автофильтр. Тепер отчет за период отлично работает.

Bahus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 31.07.2006 (Пн) 12:13
Откуда: Беларусь

Сообщение Bahus » 07.08.2006 (Пн) 9:50

Кстати, появилась еще одна проблема. Нужно, что бы в форме заполняли все Box. Я сделал так:
t = TextBox1
t = TextBox2
t = ComboBox3
t = ComboBox2
t = ComboBox1
Select Case t
Case ""
MsgBox "Не все поля заполнены!!!"
Sheets("main").Select
Exit Sub
End Select
Так вот, последний Box указанный в переменных Select Case игнорирует, даже если их меньше, чем пять, т.е. происходит вот что: если в поле соответствующее последнему Box'у ввести значение, то процедура выполняется!!! В результате в базе только дата и значение из этого Box'а. А если этополе не заполнить и пропустить еще другое или несколько то все ОК. Фигня получается какая-то.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.08.2006 (Пн) 10:27

Да нет, получается именно то, что ты написал в коде...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Bahus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 31.07.2006 (Пн) 12:13
Откуда: Беларусь

Сообщение Bahus » 07.08.2006 (Пн) 16:26

Млин, не могу разобраться, вот сижу и читаю Уокенбаха, а у него не так как у тебя написано. Давай сначала:
Если я оставлю пустым любое из полей или несколько, все работает, в БД ничего не пишет и месагу выдает.
Но как только я че-ить введу в поле которое в коде идет последним, оно берет и записывает.
Не могу понять почему и где это в коде записано.
Может не Select Case использовать надо? Но If-Then точно не подходит, в принципе может и можно, но очень длинно получиться.
Объясни плиз, может я Select Case как-то не так понимаю.
P.S. Если что извини, но я всего месяц назад о VBA узнал, первый опыт так сказать.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.08.2006 (Пн) 20:09

Bahus писал(а):t = TextBox1
t = TextBox2
t = ComboBox3
t = ComboBox2
t = ComboBox1

Это, по-твоему, делает что?..
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Bahus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 31.07.2006 (Пн) 12:13
Откуда: Беларусь

Сообщение Bahus » 07.08.2006 (Пн) 21:18

Дал всем боксам одну переменную. Ты может не понял, но функция работает как надо, если я заполняю TB1 или CB2 и т.д. все ОК. И месага и незаписывает. Но поле указанное последним в списке в данном случае ComboBox1 - это лажа. Вот если в него ввести, то записывает, почему именно последний в списке, а предидущие работают нормально. Прошу прощения, если туплю, но, млин, все равно не понимаю.
С уважением, Bahus.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 07.08.2006 (Пн) 21:25

Bahus писал(а):Дал всем боксам одну переменную.

Поясни смысл, мне он неясен.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

Bahus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 31.07.2006 (Пн) 12:13
Откуда: Беларусь

Сообщение Bahus » 08.08.2006 (Вт) 11:28

Вот смотри: у меня есть форма в ней пять полей (боксов), мне нужно, что бы если хотя бы одно поле не заполнено, то появлялось сообщение что, одно из полей не заполненно и процедура прекращалась. У меня все так и происходит. Я заполняю одно, второе, какое-то оставляю незаполненным, и оп-ля, процедура прекращается и появляется сообщение. Но если я введу в че-ить в бокс который у меня перед Select'ом стоит последним, то он берет и записывает. Вот листинг:
Private Sub CommandButton1_Click()

t = TextBox1
t = TextBox2
t = ComboBox3
t = ComboBox2
t = ComboBox1
Select Case t
Case ""
MsgBox "!!!Не все поля заполненны!!!"
Sheets("main").Select
Exit Sub
End Select
Sheets("Текущая база").Select
Range("a2").Value = Дата1.Text
Range("b2").Value = ComboBox1.Text
Range("c2").Value = ComboBox2.Text
Range("d2").Value = TextBox2.Text
Range("e2").Value = ComboBox3.Text
Range("f2").Value = TextBox1.Text
Rows("2:2").Select
Selection.Insert Shift:=xlDown
Range("G4").Select
Selection.AutoFill Destination:=Range("G3:G4"), Type:=xlFillDefault
Range("G3:G4").Select
Range("A1").Select
Sheets("main").Select
ActiveWorkbook.Save
UserForm1.TextBox1.Text = ""
UserForm1.TextBox2.Text = "все"
UserForm1.ComboBox1.Text = ""
UserForm1.ComboBox2.Text = ""
UserForm1.ComboBox3.Text = ""
End Sub
Если не лень, попробуй набросать форму и попробуй сам.
Спасибо, что пытаешься помочь.
С уважением, Bahus.

Bahus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 31.07.2006 (Пн) 12:13
Откуда: Беларусь

Сообщение Bahus » 08.08.2006 (Вт) 11:34

Там где AutoFill, внимания не обращай, у меня там формула, которую наверх вытягивать надо постоянно.

Bahus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 31.07.2006 (Пн) 12:13
Откуда: Беларусь

Сообщение Bahus » 08.08.2006 (Вт) 13:27

Все, спасибо за помощь, разобрался. И в правду не понял как Select должен работать+несовершенное знание синтаксиса. А решение оказалось простым, посколку значений немного, можно не создавать массива для проверки всех данных (я не про Select конечно, просто обдумывал, как вариант), а надо было сделать вот так:
If TextBox1 = "" Or TextBox2 = "" Or ComboBox3 = "" Or ComboBox2 = "" Or ComboBox1 = "" Then
MsgBox "!!!Не все поля заполнены!!!"
Sheets("main").Select
Exit Sub
End If

Bahus
Начинающий
Начинающий
 
Сообщения: 17
Зарегистрирован: 31.07.2006 (Пн) 12:13
Откуда: Беларусь

Сообщение Bahus » 08.08.2006 (Вт) 16:21

Если кто еще хочет, помогите.
У меня есть списки классов и мне нужно сделать так:
В боксе выбора класса я выбираю класс и тогда к следующему ьоксу должны привязаться только списки учеников выбранного класса. Как сделать? Подскажите хотя бы метод.
P.S. И еще. мне не очень хочется создавать отдельный лист БД для каждого класса. Собственно в этом основная проблема и заключается.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3

    TopList