Другие языки программирования и технологии

Подскажите, как это можно исправить?

Есть база данных....необходимо выбрать детей, возраст которых до 14 лет (включительно), в идеале бы посчитать еще разницу между текущей датой и датой рождения, и на основании этого сделать выборку вот мои процедуры p.s.в бэйсике запускайте через F8, а то может повиснуть, т.к. из цикла не выходит - стопорится на WEND Sub today() Cells(1, 7).Value = "=TODAY()" End Sub Sub otbor() Dim i, k, t As Integer Dim n, l, h, o, p, j, r As String Dim e As Date t = 1 k = 2 For i = 2 To k j = Val(Cells(i, 5).Value) While j <> 0 h = Cells(i, 5).Value If h <= 14 Then n = Cells(i, 1).Value l = Cells(i, 2).Value o = Cells(i, 3).Value p = Cells(i, 4).Value r = Cells(i, 5).Value t = t + 1 Worksheets("Лист2").Cells(1, 1).Value = "Сотрудник" Worksheets("Лист2").Cells(1, 2).Value = "Ребенок" Worksheets("Лист2").Cells(1, 4).Value = "Дата рождения" Worksheets("Лист2").Cells(1, 5).Value = "Возраст" Worksheets("Лист2").Cells(t, 1).Value = n Worksheets("Лист2").Cells(t, 2).Value = l Worksheets("Лист2").Cells(t, 3).Value = o Worksheets("Лист2").Cells(t, 4).Value = p Worksheets("Лист2").Cells(t, 5).Value = r End If i = i + 1 k = i Wend Next End Sub
Что-то я не понял, чего вы хотите добиться используя цикл For? Будьте проще.

Sub otbor()
Dim i, k, t As Integer
Dim n, l, h, o, p, j, r As String
Dim e As Date
t = 1
i = 2
'For i = 2 To k
j = Val(Cells(i, 5).Value)
While j <> 0
h = Cells(i, 5).Value
If h <= 14 Then
n = Cells(i, 1).Value
l = Cells(i, 2).Value
o = Cells(i, 3).Value
p = Cells(i, 4).Value
r = Cells(i, 5).Value
t = t + 1
Worksheets("Лист2").Cells(1, 1).Value = "Сотрудник"
Worksheets("Лист2").Cells(1, 2).Value = "Ребенок"
Worksheets("Лист2").Cells(1, 4).Value = "Дата рождения"
Worksheets("Лист2").Cells(1, 5).Value = "Возраст"
Worksheets("Лист2").Cells(t, 1).Value = n
Worksheets("Лист2").Cells(t, 2).Value = l
Worksheets("Лист2").Cells(t, 3).Value = o
Worksheets("Лист2").Cells(t, 4).Value = p
Worksheets("Лист2").Cells(t, 5).Value = r
End If
i = i + 1
j = Val(Cells(i, 5).Value)
'k = i
Wend
'Next
End Sub

На мой взгляд ненужное я закомментарил. Теперь из цикла выходит. Однако можно попытаться оптимизировать. В частности, не понятно, для чего промежуточные переменные n, l, o, p и r? Ведь можно и так сделать

Worksheets("Лист2").Cells(t, 1).Value = Cells(i, 1).Value

Аналогичный результатможно получитьи с циклом For, только предварительно надо определить номер последней строки в вашей базе. Сделать это можно, например, так.

FstFillRow = 1 ' строка, с которой начинается список
MaxFillRow = 32767 ' максимально возможная строка

' ищем последнюю заполненную строку до первой пустой
np = Range("A" & FstFillRow & ":A" & MaxFillRow).End(xlDown).Row

После выполнения этого кода в переменной np будет номер последней заполненной строки, а дальше можно в цикле просматривать строки и выбирать нужные.

For i = FstFillRow To np
' делаем то, что надо

Next i
ГА
Гамаль Абдель Насер Хусейн
59 613
Лучший ответ
Александр Чумейкин Большущее спасибо
чем дальше в лес.. .
знаю как в базе д делается, с икселом не дружу с 87 года
может там последовательности выборки имеются притензии
а может результатом не могут быть вычисляемые поля...
M)
Medet )))))))
5 929
ненавижу бэйсик, в дельфи может могу примерно описать алгоритм, я в базах данных не очень разбираюсь
хз

оО

оО

________________________________
хз!!!