Переместить значение из одной пользовательской формы в другую (переменную) пользовательскую форму - PullRequest
0 голосов
/ 04 октября 2018

Я адаптировал средство выбора даты Eric Bentzen к своим потребностям ( веб-сайт и оригинальный файл ), сейчас я пытаюсь использовать его для двух разных пользовательских форм, но стараюсь не добавлять две отдельные кнопки, предназначенные для перемещения, введенныеДата.

Все время это первая открытая пользовательская форма (давайте назовем ее ApplicationUF) или вторая (назовем это AnswerersUF), но никогда обе одновременно.

Обе формы имеют TextBox для ввода даты.Моя идея состоит в том, что после нажатия на эту кнопку выбора даты TextBox появляется пользовательская форма, пользователь выбирает дату, нажимает кнопку сохранения, пользователь выбирает дату, пользовательская форма закрывается, и введенная дата перемещается в выделенную дату активной пользовательской формы TextBox.Но у меня возникают проблемы со ссылкой на активную пользовательскую форму.

TLDR: как определить, какая пользовательская форма активна и переместить в нее значения из другой пользовательской формы?

Мой код пока:

В пользовательской форме выбора даты выбранная переменная даты объявляется как открытая переменная в отдельном модуле Public datFirstDay As Date

Теперь я пытаюсь добавить событие on_clik для сохранения кнопки выбора даты в пользовательской форме, которая определяет активную пользовательскую форму и перемещает введенныеДата.Пока мой код:

Private Sub cmdSave_Click()
   'I am having problem determining which use form is open
   'I figured out that syntax should probably look something like this
   'but this obviously doesent work since as far as I understand IsLoaded used only in Acces
   'how can I adapt it to excel?
If VBA.UserForms("ApplicationUF").IsLoaded = True Then
    ApplicationUF.rDateTB.Value = datFirstDay
        ElseIf VBA.UserForms("AnswersUF").IsLoaded = True Then
          AnswersUF.DateTB.Value = datFirstDay
    End If

cmdCancel_Click
End Sub

Не думаю, что это важно, но на всякий случай я добавляю субкод cmdCancel_Click.Это оригинальный, неизменный код, написанный Эриком Бенценом.

Private Sub cmdCancel_Click()

Set colLabelEvent = Nothing
Set colLabels = Nothing
bSecondDate = False
sActiveDay = Empty
lFirstDay = 0
Unload Me

End Sub

1 Ответ

0 голосов
/ 04 октября 2018

Чтобы проверить, загружена ли пользовательская форма (она же видимая), вы можете использовать эту функцию:

Public Function formLoaded(frmName As String) As Boolean
    Dim f
    For Each f In UserForms
        Debug.Print f.Name
        If f.Name = frmName Then formLoaded = True
    Next f
End Function

Пример использования:

If formLoaded("UserForm1") then Unload UserForm1

Что касается передачи информации между формами, я бы использовал публичные переменные .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...