Сохранение списков ComboBox заполненными

Я создал Word 2010 VBA Macro Sub с помощью UserForm. Sub выполняет поиск == Codes == в документе формы, помещает найденный == code == в качестве метки в пользовательскую форму, а затем позволяет пользователю заменить == code == своим вводом в поле со списком ( часть той же UserForm).

Каждая строка введенных данных затем сохраняется в списке Combobox в пользовательской форме для последующего выбора при необходимости.

Это отлично работает до тех пор, пока этот макрос / пользовательская форма не истечет, потому что искомый документ завершен (или отменен).

Затем я хотел бы открыть следующий документ формы, и при новом запуске этого же макроса / подпрограммы сохранить прежний список данных со списком (в качестве вариантов для заполнения этого следующего открытого документа - например, код == Имя клиента == будет часто появляться, и я бы предпочел выбрать запись в списке со списком, а не вводить имя клиента снова и снова)

Но я не могу сохранить список combobox при новом запуске этого Macro Sub, заполненный предыдущими данными combobox, даже если я выделю эту процедуру как отдельный модуль и предварительно определю переменные с «общедоступными» измерениями.

Итак, прежде чем я вырублю себя, пытаясь понять это ... просто вопрос:

Когда макрос завершается, все ли общедоступные переменные "отбрасываются"? Когда я программировал макросы в DOS WP.51, вы могли бесконечно хранить строки данных в ОЗУ (пока вы их не «убили» или не закрыли WP).

Если общедоступные переменные не «отбрасываются», может ли кто-нибудь дать мне образец кода, с помощью которого общедоступные переменные могут быть сохранены и заполнены в дублирующе запущенной пользовательской форме поля со списком.

Любые идеи, какими бы краткими они ни были, помогут

Заранее большое спасибо. . .

Майк


person Mike28    schedule 18.01.2016    source источник
comment
Просто чтобы понять правильную идею. Я полагаю, у вас есть этот UserForm макрос, сохраненный в Normal шаблоне? а затем, когда вы открываете следующий документ формы, вы бы закрыли Word, а затем открыли его снова?   -  person Jean-Pierre Oosthuizen    schedule 19.01.2016


Ответы (1)


Не совсем уверен, что вы пытаетесь сделать, но я бы порекомендовал следующее (при условии, что форма называется «UserForm1», а затем «UserForm2»:

1) Создайте модуль, который вы используете для открытия формы, используя:

Sub test()
    UserForm1.Show
    'Rest of things that you want to do...you will be able to access the values in your combobox in userform1
    UserForm2.Show
End Sub

2) В UserForm1 включите кнопку, которая закроет форму, и включите следующий код:

Sub btn_Exit_Click()
    Me.Hide
End Sub
Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)

    If CloseMode = 0 Then
        Cancel = True
        MsgBox "The X is disabled, please use a button on the form.", vbCritical
    End If

End Sub

Это позволит вам сохранить контроль над UserForm и гарантировать, что вы сможете сохранить значения. Возможно, удастся отключить кнопку закрытия, но я не смог это понять (мой опыт работы с формами в основном связан с Access, и у них разные свойства).

Скрытие формы сохраняет значения, чтобы вы могли их просматривать, тогда как, когда пользователь закрывает форму, вы теряете значения, которые были в ней.

* Примечание. Код для отключения кнопки X взят из VBA Express.

person OpiesDad    schedule 19.01.2016
comment
Спасибо, OpieDad. Нет, проблема не в этом; но мне будет очень полезно отключить кнопку X. Спасибо. Майк - person Mike28; 19.01.2016
comment
Я должен был это проверить. Предложенный мной метод на самом деле не работает; Я отредактирую, чтобы включить тот, который есть. - person OpiesDad; 19.01.2016