vba: пользовательские функции - PullRequest
0 голосов
/ 01 июля 2011

У меня есть саб, который активируется с помощью кнопки на пользовательской форме.Основная процедура по щелчку:

1) Запустить мою подпрограмму на основе пользовательских данных

2) Выбрать лист результатов

3) Показать мои результаты

4) Выгрузить мою пользовательскую форму

Я столкнулся с проблемой, потому что я хочу попытаться установить границы для пользовательского значения ввода, и если пользователь вводит что-то вне диапазона, появится окно сообщения, уведомляющее ихиз диапазона.Я смог выполнить эту простую задачу с помощью цикла if / then.После того, как пользователь выходит из окна сообщения, я хочу, чтобы форма пользователя отображалась вместе с исходными пользовательскими вводами и позволяла пользователю изменять свои входные данные.Но в настоящее время после того, как пользователь нажимает «ОК» в окне сообщения, моя подпрограмма click продолжает свою процедуру, выгружает мою пользовательскую форму и выбирает мои таблицы результатов.Есть ли простой однострочный код, который я могу поставить после состояния msgbox, чтобы сохранить пользовательскую форму вместо того, чтобы заставлять пользователя повторно вводить их значения?

РЕДАКТИРОВАТЬ - Общая суть моего кода следующая:

Private Sub CommandButton1_Click()
    PropertySearch.Search
    ActiveSheet.Name = "SearchResult"
    Cells(1, 1).Select
    Unload ILsearch
End Sub

Sub Search()
    If (TextBox1 And TextBox2 <= 8) And (TextBox1 And TextBox2 > 0) Then
    '
    'Performs my desired function
    '
    Else: MsgBox ("Database only includes ionic liquids with a maximum of 8 carbons in cation")
    End If

Ответы [ 2 ]

1 голос
/ 01 июля 2011

Я бы включил Поиск в функцию, которая возвращает истину или ложь, если ввод находится в пределах границ или нет:

Function Search() AS Boolean

   If (TextBox1 And TextBox2 <= 8) And (TextBox1 And TextBox2 > 0) Then
      Search = True
   Else
      Search = False
   EndIf

End Function

тогда вы просто выходите из подпрограммы, если ввод не соответствует вашим границам:

Private Sub CommandButton1_Click()

    If(Not PropertySearch.Search) Then
       MsgBox("your error message here")
       Exit Sub
    EndIf

    ' rest of the routine

End Sub
0 голосов
/ 01 мая 2019

Существует около тысячи и один способ обойти это - вопрос в том, какое поведение вы хотите, чтобы форма имела?

Вы хотите, чтобы оно само закрывалось через определенное время? Проверьте этот пример таймера 1

Или загляните в приложение. Время

Application.OnTime Now + TimeValue("00:00:10"), "unloadForm"

Где "unloadForm" - это сабвуфер в обычном модуле

Sub unloadForm()
    Unload ILsearch
End Sub

Хотите добавить кнопку закрытия формы?

Private Sub CommandButton1_Click ()
    Unload Me
End Sub

Хотите, чтобы пользователь закрыл форму вручную с красным крестиком в верхнем углу? Просто удалите строку с Unload

Вы хотите отобразить модальное всплывающее окно, которое замораживает Excel до закрытия, а затем ваша форма выгружается? Попробуйте добавить MsgBox "Hello" перед выгрузкой формы.

И многое, многое, многое другое!

Например, у меня есть несколько форм, которые используют события клавиатуры. Escape может очистить все поля и скрыть / выгрузить форму, в то время как Enter делает то же самое, но также записывает значения в таблицу, Delete только очищает активный элемент управления и не скрывает форму, стрелки вверх и вниз пролистывают формы, скрывая текущую и показывает предыдущую / следующую, в то время как левая и правая функции, такие как tab / shift + tab.

...