Консультация № 53100
24.08.2006, 10:56
0.00 руб.
0 1 1
Доброго времени суток, Уважаемые. Пишу программу по учету посещаемости для школы,т.к. БД обещает быть небольшой то делаю все в Excel. Возникали некоторые трудности:
1)Делал отчет по выюранному периоду т.е. выбирают период с такого по такое и класс либо ученика. Програмного аналога автофильтра с условием не нашел, воспользовался встроенным в Excel. Получилось довольно сложно:
Private Sub CommandButton1_Click()
Dim i, f As String
Sheets("Текущая база").Select
Range("h3").Value = TextBox1.Text
Range("i3").Value = TextBox2.Text
Range("j3").Select
ActiveCell.FormulaR1C1 = "=DATEVALUE(RC[-2])"
Range("k3").Select
ActiveCell.FormulaR1C1 = "=DATEVALUE(RC[-2])"
Range("J3:K3").Select
Selection.Copy
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Range("J3").Select
UserForm3.TextBox3.Text = [J3]
UserForm3.TextBox4.Text = [k3]
i = TextBox3.Text
f = TextBox4.Text
Columns("G:G").Select
Selection.Copy
Columns("L:L").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False
Application.CutCopyMode = False
Rows("2:2").Select
Selection.AutoFilter
With Selection
.AutoFilter Field:=2, Criteria1:=ComboBox2.Value
.AutoFilter Field:=7, Criteria1:=">=" & i, Operator:=xlAnd, _
Criteria2:="<=" & f
End With
Range("A1:F1").Select
Selection.Copy
Range("A2").Select
ActiveSheet.Paste
Range("A3").Select
Range(Selection, Selection.End(xlDown)).Select
Range(Selection, Selection.End(xlToRight)).Select
Selection.Copy
Sheets("Отчет").Select
Range("A2").Select
ActiveSheet.Paste
Код ставит афтофильтр, копирует в соседние ячейки даты введенные в текстбоксы в соседние с ними извлекает значение дат, вставляет значения в скрытые текстбоксы на форме, значение этих текстюоксов является переменными, кои подставляются в условия автофильтра. Отчет работает без проблем, но код довольно громоздкий, плюс хотелось бы обойтись без этих вставлений переставлений по ячейкам и доп текстбоксам.

Обсуждение

Неизвестный
25.08.2006, 16:50
общий
это ответ
Здравствуйте, Bahus!

Код в приложении тоже работает "без проблем".

Приложение:
Private Function ddate(str) Dim r As Date On Error GoTo x r = DateValue(Trim(str)) x: ddate = r End Function Private Sub CommandButton1_Click() Dim i, f Set base = Sheets("Текущая база") Set report = Sheets("Отчет") i = DateValue(TextBox1.Text) f = DateValue(TextBox2.Text) report.Range("a2:f2").Formula = base.Range("a2:f2").Value ys = 3 yr = 3 While (base.Range("a" & yr)) <> "" MsgBox (ddate(base.Range("f" & yr).Text) >= i) & base.Range("f" & yr).Text & (ddate(base.Range("f" & yr)) <= f) If (Trim(base.Range("b" & yr).Text) = ComboBox2.Value) And (ddate(base.Range("f" & yr).Text) >= i) And (ddate(base.Range("f" & yr)) <= f) Then report.Range("a" & ys & ":f" & ys).Formula = base.Range("a" & yr & ":f" & yr).Value ys = ys + 1 End If yr = yr + 1 Wend End Sub
Форма ответа