2014-02-19 5 views
2

Так, Если у меня есть эта функция в UserForm:порядок событий в UserForm

function myFunc() as String 
    Me.Show vbModal 
    stringVar = "Second" 
end function 

и у меня есть событие щелчка кнопки одинокого команды на указанный UserForm:

Private Sub cmdbutton_Click() 
    Unload Me 
    stringVar = "First"             
End Sub 

Мои вопрос в том, когда я вызываю эту функцию («MyFunc») откуда-нибудь, будет ли событие нажатия кнопки («cmdButton») продолжить обработку до того, как функция будет продолжена, или это в основном бросок монеты? эта переменная stringVar является частной переменной пользовательской формы. он устанавливается в событии клика этой кнопки, но я хочу использовать его в функции после щелчка. (там будут другие компоненты по форме, вычислениям и т. д.)

так существует ли риск того, что функция продолжит обработку до завершения события клика? Если функция продолжается до события щелчка, то переменная обыкновение быть установлена ​​правильно

+0

Почему бы процесс события щелчка ничего, если событие не получает уволят, то есть, если кнопка не нажата? –

+0

ну, очевидно, это не было бы ... но если кнопка нажата, то закончится ли процесс клика, прежде чем обработка вернется к 'myFunc'? – user1759942

+0

, когда myfunc называется формой, открывается модально, поэтому обработка в 'myfunc' останавливается до тех пор, пока форма не будет закрыта. Мне просто нужно знать, будет ли при закрытии формы в событии клика продолжить обработку в щелчке, прежде чем вернуться к 'myfunc' – user1759942

ответ

1

Мой вопрос, когда я называю эту функцию («MyFunc») откуда-то, будет щелчок событие кнопки («cmdButton») продолжить обработку до того, как функция будет продолжена, или это в основном бросок монеты?

Позвольте мне объяснить это с изображением с последующим описанием

enter image description here

  1. При выполнении данной функции, первая линия выполнена. Теперь, поскольку форма показана как модальная, следующая строка, которая равна stringVar = "Second", не будет работать до момента, когда пользовательская форма будет выгружена.
  2. Следующая строка, которая будет выполнена в вышеуказанном сценарии, равна Unload Me. Однако это не означает, что после этого код не будет работать. Unload Me не похож на Exit Do или Exit For. Он просто выгружает объект и никоим образом не останавливает дальнейшее выполнение скрипта/кода.
  3. Так, очевидно, следующая строка, которая выполняется в stringVar = "First" и достигает End Sub
  4. Это время управление было возвращено к функции, и она продолжает выполнять следующую строку, которая stringVar = "Second"

Надежда это имеет смысл. Если это не так, пожалуйста, не стесняйтесь задавать любые сомнения, которые у вас есть.

Вы также можете увидеть выполнение кода, пройдя его через F8.

Для дальнейшего чтения:Debugging VBA Code

+1

Я видел, что в отладчике я просто хотел подтвердить, что он ВСЕГДА случится таким образом, и это был не какой-то бросок монеты, который обычно шел именно так. Полезно, как всегда сиддхарт :) – user1759942

Смежные вопросы