
Другие языки программирования и технологии
Подскажите, как это можно исправить?
Есть база данных....необходимо выбрать детей, возраст которых до 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
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
Александр Чумейкин
Большущее спасибо
чем дальше в лес.. .
знаю как в базе д делается, с икселом не дружу с 87 года
может там последовательности выборки имеются притензии
а может результатом не могут быть вычисляемые поля...
знаю как в базе д делается, с икселом не дружу с 87 года
может там последовательности выборки имеются притензии
а может результатом не могут быть вычисляемые поля...
ненавижу бэйсик, в дельфи может могу примерно описать алгоритм, я в базах данных не очень разбираюсь
хз
оО
оО
________________________________
хз!!!
оО
оО
________________________________
хз!!!
Похожие вопросы
- Подскажите пожалуйста что необходимо исправить (метод пузырька на с++)
- Подскажите, что нужно добавить и исправить?
- Не подскажете что за такое с межстрочным интервалом и как исправить
- Подскажите почему Паскаль не делает нужного расчета и выводит на экран просто S вместо его значения? Как это исправить?
- На Паскаль!! Вывести на экран в столбик все слова введённого текста, исправить опечатки и напечатать исправленный текст.
- программа на ассемблере, не пойму в чем ошибка и как исправить
- Помогите исправить ошибку в программе (c++).
- посмотрите прогу по паскалю , сделал но не работает подскажите как исправить плиз
- Проблема с задачей с паскале, подскажите пожалуйста где неправельно и как ошибку исправить
- Изменился цвет изображения на мониторе (блеклый, с красноватым оттенком) . Подскажите как исправить.