Команда Accessbox VBA Listbox.Requery очищает ListItems

У меня есть форма доступа, где я хочу, чтобы пользователи выбирали AwardNumber. Когда они выбирают награду, соответствующие документы для этой награды отображаются в списке "Неполный" или "Полный". Затем я хочу, чтобы они могли перемещать элементы из одного списка в другой. ListBoxes являются одним выбором.

Вот бэкэнд:
Incomplete ListBox (говорит Unbound в дизайне) имеет 3 столбца. Столбец Bound равен 1, но 1-й и 3-й столбцы имеют ширину 0 и поэтому скрыты. В списке также есть следующий RowSource:
SELECT DocTbl.DocID, DocTbl.DocTitle, DocTbl.DocLink FROM DocTbl WHERE ((DocTbl.Complete <> Yes) AND (DocTbl.AwardNumber = Forms!Select_Doc_To_Code!Award_CBox.Text)) ORDER BY DocTbl.DocID

(Полный ListBox имеет то же самое, кроме DocTbl.Complete <> Yes, она имеет DocTbl.Complete = Yes.)

Когда они выбирают AwardNumber в ComboBox, есть какой-то VBA, который выполняет следующее, чтобы заполнить списки, что работает, как и ожидалось:
Me.Incompletes.Requery Me.Completes.Requery

Две кнопки запускают код для "перемещения" предметов. Вот код для верхней кнопки, которая предназначена для "перемещения" документа из списка "Неполные" в список "Завершено" (т. Е. Путем установки значения "Завершить" в документе в "Да" и последующего запроса списков). В указанных строках все идет не так:

Sub Move_To_Complete_Click()
  docID = Incompletes.Column(0, Incompletes.ListIndex)

  Set Tbl = CurrentDb.TableRefs("DocTbl")
  Set db = CurrentDb

  db.Execute = "UPDATE DocTbl " & _
  " SET DocTbl.Complete = Yes " & _
  " WHERE DocTbl.DocID = " & docID

---->Me.Incompletes.Requery
---->Me.Completes.Requery
End Sub

Другими словами, запрос UPDATE работает (я вижу обновленные данные в таблице), но когда я пытаюсь запросить оба ListBox для их обновления, все элементы исчезают из обоих!. Кроме того, если я выберу другую награду в ComboBox, а затем повторно выберу ту же награду, списки снова заполнятся правильно, просто выполнив те же команды.Requery!

я пробовал Me.Refresh, Me.Recalc, Я также попытался установить RowSource снова. Интересно, это слишком рано? Я поставил точки останова и DoEvents, так что я не думаю, что это вопрос времени, но, может быть, это больше код, который нужно остановить, чтобы запустить для работы. Что не имеет смысла, потому что запрос это код.

Я знаю, что есть другие способы сделать это (я попробовал и потерпел неудачу с ними), но я действительно хотел бы знать, почему ЭТОТ способ не работает.

Заранее спасибо!!

1 ответ

Решение

Вы используете .Text свойство, и, как предлагает DataWriter, вы не должны.

.Text свойство доступно только тогда, когда поле имеет фокус (см. MSDN).

Потому что вы называете это в OnClick событие для Move_To_Complete кнопка, эта кнопка имеет фокус, и поэтому .Text собственность недоступна.

Два обходных пути:

  1. использование Award_CBox.SetFocus прежде чем запрашивать
  2. использование Forms!Select_Doc_To_Code!Award_CBox.Value использовать значение свойства. Обратите внимание, что предполагается, что связанный столбец совпадает с отображаемым столбцом.
Другие вопросы по тегам