ник: Гоблин
snip, спасибо. Я вроде разобрался. Теперь убрал большие циклы, все работает через простой рекордсет.
Dim v As Variant
Dim rst As DAO.Recordset
Dim i As Integer
Me.Условие = "" ' поле на форме настройка
For Each v In Me.Список1.ItemsSelected
If Len(Условие) = 0 Then
Me.Условие = Me.Список1.ItemData(v)
Else
Me.Условие = Me.Условие & "," & Me.Список1.ItemData(v)
End If
Next v
Set rst = CurrentDb.OpenRecordset("SELECT Настройки.Код, Настройки.Знаков, Настройки.ПолеФормы FROM Настройки WHERE (((Настройки.Код) In (" & Условие & ")));")
With rst
If .RecordCount <> 0 Then
Do While Not .EOF
For i = 1 To !Знаков
Forms![Бланк больничного](!ПолеФормы & i).TOP = Forms![Бланк больничного](!ПолеФормы & i).TOP - 10
Next i
.MoveNext
Loop
End If
End With
Проблема была из-за отсутствия .MoveNext и Loop Без них работало по одному значению. Это рабочий код. Набираю изменяемые строки и одной кнопкой все двигается вверх. Сейчас проблема в обновлении рекордсетом. Раньше было все типа так:
Dim i As Integer
For i = 1 To Me.Список1.Column(2)
Forms![Бланк больничного](Список1.Column(1) & i).TOP = Forms![Бланк больничного](Список1.Column(1) & i).TOP + 1 * i
Next i
DoCmd.SetWarnings False
DoCmd.RunSQL "UPDATE Настройки SET Настройки.Наклон = Настройки.Наклон+1 WHERE (((Настройки.Код)=" & Me.Список1.Column(3) & ")) ;"
Me.Наклон = Me.Наклон + 1 ' индикация на форме настройки
Выбрал в списке нужный диапазон, наклонил строку (если бланк криво отпечатан) и внес изменения в таблицу поле наклон. Также и на сдвиг строки в разные стороны.
Теперь же, если выбрать несколько строк мультиселектом, придется рекорсетом обновлять таблицу настройка.
пытаюсь так:
Set rst = CurrentDb.OpenRecordset.Update("update Настройки SET Настройки.[TOP] = Настройки.[TOP]-10 WHERE (((Настройки.Код) In (" & Условие & ")));")
With rst
If .RecordCount <> 0 Then
Do While Not .EOF
!TOP = !TOP - 10
.MoveNext
Loop
End If
End With
Жалуется на условие. Как-то вроде типа ... На форме все двигает, а в таблице как изменить в нескольких строках, которые выбрал? Ведь в каждой строке значения могут быть разными изначально, и от каждого нужно отнять 1 шаг. (в данном случае 10 пунктов)