2016-01-03 3 views
0

Я хочу, чтобы вызвать функцию в форме из функции в ModulVBA Excel: Вызов к югу в форме из модуля

Поэтому я определил функцию Init_StockForm() в форме (которая называется форма):

Public Sub Init_StockForm() 

     MsgBox ("Bla") 

    End Sub 

Я называю эту функцию в модуле следующим образом:

Form.Init_StockForm 

, но это приводит к ошибке времени выполнения 91

Так что здесь не так? Спасибо сформировать помощь

+1

И зачем вы использовали такую ​​мерзость? Почему бы просто не определить sub в модуле кода, где он принадлежит? Во всяком случае, я не уверен, что вы можете это сделать, как видно из вашего примера. Общие подсайты не имеют места внутри модуля формы, так же как они не имеют ничего общего с модулем листа. – vacip

+1

Он отлично работает для меня, если я назову его, используя эту одну строку из суб в регулярном модуле. Не обескураживайте довольно резким ответом @ vacip, но, возможно, еще больше кода, чтобы помочь нам устранить неполадки. –

+0

Причина, по которой я хочу вызвать функцию из формуляра в модуле, такова: У меня есть кнопка на листе excel, которая выполняет макрос (так что у меня есть функция в модуле), но эта функция Init_StockForm() в форме, потому что ему необходимо получить доступ ко всем элементам формы. Этот Init_StockForm() использует функции обновления, которые мне также нужны в Форме, поэтому я хочу выполнить функцию из формы в модуле. Поэтому, если у вас @vacip есть идея лучше понять, что ваш добро пожаловать, чтобы опубликовать его – Markus

ответ

0

сделать новый экземпляр вашей формы (VBA является объектно-ориентированным языком программирования)

модуль:

Private Sub callFormSub() 
Dim myForm As New UserForm1 
myForm.subInUserForm 
End Sub 

Форма:

Public Sub subInUserForm() 
MsgBox "BLA" 
End Sub 
+0

Это была моя первая мысль, но обратите внимание, что это необязательно, по крайней мере, в Excel 2016. –

+0

Это также нецелесообразно использовать, если вы используете 'Dim ... As New', так как вы создаете переменную автоматического создания экземпляра для класса это уже автоинституция. – Rory

0

Спасибо за ваши ответы Сегодня решение, которое я разместил, также работает (: /), причина может быть ошибкой в ​​моей установке, так как макрос показывает также av но я пошлю это позже в другом посте, если не смогу его решить.

+0

О, рад, что ты справился. :) – vacip

+0

Поскольку это, как представляется, вызвано ошибкой, вы можете захотеть удалить вопрос - вряд ли кто-нибудь сможет помочь кому-либо в будущем, будучи одноразовой, невоспроизводимой ошибкой. _ «Проблема, которая больше не может быть воспроизведена или простая типографская ошибка» - мы обычно закрываем или удаляем такие вопросы, как здесь. См. Обсуждение аналогичного случая [здесь] (http://meta.stackoverflow.com/questions/256475/delete-own-question-after-it-works-randomly), если вы заинтересованы. Никакого вреда, если вы решите не удалять его, но, скорее всего, он будет закрыт. – vacip