Jak wywołać funkcję VBA do procedury podrzędnej

Wiem, że to proste pytanie dla kogoś, ale nigdy tak naprawdę nie używałem modułu funkcyjnego, ponieważ nie rozumiałem, czym one są.

Więc mam całą masę rzeczy, do których mogę tego użyć (ograniczyć redundancję), ale chcę wiedzieć, jak wywołuję procedurę sub (jak kliknięcie przycisku) z formularza.

Próbowałem tego...
Sub Command_Click()
    Call "pptCreator"
End Sub
Wiem, że to bardzo złe, ale nie mam pojęcia, jak wprowadzić to do procedury.
Author: LuckySevens, 2009-07-02

5 answers

Oto kilka różnych sposobów wywoływania rzeczy w programie Microsoft Access:

Aby wywołać SUB lub funkcję formularza z modułu

Sub w formularzu, do którego dzwonisz, musi być publiczny, jak w:

Public Sub DoSomething()
  MsgBox "Foo"
End Sub

Wywołaj sub tak:

Call Forms("form1").DoSomething

Formularz musi być otwarty przed wykonaniem połączenia.

Aby wywołać procedurę zdarzenia, należy wywołać procedurę publiczną w formularzu i wywołać procedurę zdarzenia w tej procedurze publicznej.

Aby wywołać podprogram w module z formularza

Public Sub DoSomethingElse()
  MsgBox "Bar"
End Sub

...po prostu zadzwoń do niego bezpośrednio z procedury wydarzenia:

Call DoSomethingElse

Wywołanie podprogramu z formularza bez użycia procedury zdarzenia

Jeśli chcesz, możesz powiązać funkcję ze zdarzeniem kontrolki formularza bez konieczności tworzenia procedury zdarzenia pod kontrolą. Aby to zrobić, najpierw potrzebujesz publicznej funkcji w module zamiast sub, jak to:

Public Function DoSomethingElse()
  MsgBox "Bar"
End Function

Następnie, jeśli masz przycisk na formularzu, zamiast aby umieścić [procedurę Event] w zdarzeniu OnClick okna właściwości, należy umieścić to:

=DoSomethingElse()

Kiedy klikniesz przycisk, wywoła funkcję publiczną w module.

Wywołanie funkcji zamiast procedury

Jeśli wywołanie sub wygląda tak:

Call MySub(MyParameter)

Wywołanie funkcji wygląda następująco:

Result=MyFunction(MyFarameter)

Gdzie wynikiem jest zmienna typu zwracana przez funkcję.

Uwaga: nie zawsze potrzebujesz słowa kluczowego Call. Większość czas, możesz po prostu nazwać sub tak:

MySub(MyParameter)
 26
Author: Robert Harvey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-12 01:51:37

Jeśli pptCreator jest funkcją / procedurą w tym samym pliku, możesz wywołać go jak poniżej

call pptCreator()

 3
Author: shahkalpesh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-02 02:29:05

Wywołanie procedury podrzędnej-Technika trójdrożna

Gdy masz procedurę, niezależnie od tego, czy ją utworzyłeś, czy jest częścią języka Visual Basic, możesz jej użyć. Korzystanie z procedury jest również określane jako wywołanie go.

Przed wywołaniem procedury, powinieneś najpierw zlokalizować sekcję kodu, w której chcesz jej użyć. Aby wywołać prostą procedurę, wpisz jej nazwę. Oto przykład:

Sub CreateCustomer()
    Dim strFullName As String

    strFullName = "Paul Bertrand Yamaguchi"

msgbox strFullName
End Sub

Sub Exercise()
    CreateCustomer
End Sub

Poza używaniem nazwy procedury, aby ją nazwać, możesz również poprzedzić ją za pomocą Call keyword. Oto przykład:

Sub CreateCustomer()
    Dim strFullName As String

    strFullName = "Paul Bertrand Yamaguchi"
End Sub

Sub Exercise()
    Call CreateCustomer
End Sub

Podczas wywoływania procedury, bez lub bez słowa kluczowego Call, można opcjonalnie wpisać nawiasy otwierające i zamykające po prawej stronie jej nazwy. Oto przykład:

Sub CreateCustomer()
    Dim strFullName As String

    strFullName = "Paul Bertrand Yamaguchi"
End Sub

Sub Exercise()
    CreateCustomer()
End Sub

Procedury i poziomy dostępu

Podobnie jak dostęp zmienny, dostęp do procedury może być kontrolowany przez poziom dostępu. Procedura może być prywatna lub Publiczna. Aby określić poziom dostępu do procedury, poprzedź ją prywatnym lub Publiczne słowo kluczowe. Oto przykład:
Private Sub CreateCustomer()
    Dim strFullName As String

    strFullName = "Paul Bertrand Yamaguchi"
End Sub

Reguły, które zostały zastosowane do zmiennych globalnych są takie same:

Private: jeśli procedura jest prywatna, może być wywołana przez inne procedury tego samego modułu. Procedury modułów zewnętrznych nie mają dostępu do takiej procedury.

Ponadto, gdy procedura jest prywatna, jej nazwa nie pojawia się w oknie dialogowym makr

Public: procedura utworzona jako Publiczna może być wywołana przez procedury tego samego moduł i procedury innych modułów.

Również, jeśli procedura została utworzona jako Publiczna, gdy uzyskasz dostęp do okna dialogowego makr, pojawi się jej nazwa i możesz ją stamtąd uruchomić

 3
Author: Rockey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-08-22 15:36:19

Procedury w Module zaczynają być użyteczne i ogólne, gdy przekazujesz argumenty.

Na przykład:

Public Function DoSomethingElse(strMessage As String)  
    MsgBox strMessage
End Function

Może teraz wyświetlić dowolną wiadomość przekazywaną ze zmienną łańcuchową o nazwie strMessage.

 1
Author: Mark3308,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-02 13:09:45

Aby dodać funkcję do nowego przycisku w formularzu: (i uniknąć użycia makra do wywołania funkcji)

Po utworzeniu funkcji (Function MyFunctionName ()) i znajdujesz się w widoku Projekt formularza:

  1. Dodaj nowy przycisk(nie sądzę, że możesz zmienić przypisanie starego przycisku-nie jestem jednak pewien).
  2. gdy otworzy się okno Kreatora przycisków, kliknij przycisk Anuluj.
  3. przejdź do zakładki właściwości przycisku zdarzenia-na polu kliknięcia.
  4. w tym polu rozwijane menu wybierz: Event Procedura.
  5. Teraz kliknij przycisk obok rozwijanego menu, które ma ... w nim zostaniesz przeniesiony do Nowego prywatnego Sub w oknie forms Visual Basic.
  6. W podtypie prywatnym: Call MyFunctionName
    Powinno to wyglądać mniej więcej tak:

Private Sub Command23_Click ()

Call MyFunctionName

End Sub

    Więc daruj sobie.
 0
Author: Gary C,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-05 15:37:05