mojaSymfonia FORUM
https://forum.mix-soft.pl/

[VBA] Wyłączenie HMF 2014a z poziomu VBA
https://forum.mix-soft.pl/viewtopic.php?f=15&t=5786
Strona 1 z 1

Autor:  wars1977 [ 2014-05-09, 09:20 ]
Tytuł:  [VBA] Wyłączenie HMF 2014a z poziomu VBA

Witam,

Czy mógł by mi ktoś podpowiedzieć jak wyłączyć HMF 2014a z posiomu VBA ? oraz w jaki sposób z poziomu VBA zakończyć pracę z firmą. To drugie rozwiązanie było by nawet lepsze.

Jakaś metoda , funkcja ?

Dzięki z góry i pozdrawiam
Łukasz.

Autor:  rafal [ 2014-05-10, 08:18 ]
Tytuł:  Re: [VBA] Wyłączenie HMF 2014a z poziomu VBA

Opisz do czego Ci jest potrzebna taka funkcjonalność.
W, którym momencie chcesz wywołać kod zamykający?

Zamykając program możesz mieć w edycji dokumenty.
Operator musi zdecydować co z nimi zrobić (zapisać, Anulować zmiany).

Możesz wysłać do procesu aplikacji HMF komunikat WM_CLOSE
Kod:
SendMessage(hWnd, WM_CLOSE, 0, 0)


W ostateczności możesz zabić proces aplikacji. Ale to nie jest chyba dobry pomysł.

Autor:  wars1977 [ 2014-05-10, 09:42 ]
Tytuł:  Re: [VBA] Wyłączenie HMF 2014a z poziomu VBA

Zaraz po otwarciu firmy sprawdzam kilka danych w bazie i na ich podstawie decyduję o zamknięciu programu lub nie. Uzytkownik nie zdąży nic zrobić, więc nie ma problemu z otwartymi dokumentami.
Najlepiej było by zalogowanego już użytkownika , po prostu wylogować (zakończyć prace z firmą).

Starałem się użyć obiektu "application" i metody "quit" ,ale nie działa.

Autor:  rafal [ 2014-05-10, 12:25 ]
Tytuł:  Re: [VBA] Wyłączenie HMF 2014a z poziomu VBA

A dlaczego nie użyjesz OnOpen w procedurach AmBasic?

Kod:
int sub OnOpen()

   if nie_spełniony_warunek then
      OnOpen = -6000 // spowoduje wyjście z firmy
   else
      OnOpen = 0
   endif

endsub

Autor:  wars1977 [ 2014-05-13, 09:17 ]
Tytuł:  Re: [VBA] Wyłączenie HMF 2014a z poziomu VBA

Ponieważ cała procedura za wzgledu na jej specyfike ,musi być napisana w VBA. Chyba ,że można wywołać jakąś procedurę AmBasica zamykająca firmę z poziomu VBA ? .

To może inaczej, jak z poziomu AmBasic'a wykonać funkcję napisaną w VBA i otrzymać od niej z powrotem wynik do AmBasic'a ?

Autor:  rafal [ 2014-05-13, 13:15 ]
Tytuł:  Re: [VBA] Wyłączenie HMF 2014a z poziomu VBA

W AmBasic Obiektem aplikacji

Kod:
dispatch app = GetApplication()


Potem obiekt dokumentu sbc

Kod:
doc = App.Documents.OpenDocument("")


potem obiekt MxInter

Kod:
mxInter = doc.CommandDoc("GetMxInterDoc")


potem uruchomienie aplikacji VBA

Kod:
exec = mxInter.ExecuteApp(....)


exec zwróci retVal z procedury sub _EvExecuteApp() po stronie VBA

Autor:  wars1977 [ 2014-05-13, 14:10 ]
Tytuł:  Re: [VBA] Wyłączenie HMF 2014a z poziomu VBA

rafal pisze:
A dlaczego nie użyjesz OnOpen w procedurach AmBasic?

Kod:
int sub OnOpen()

   if nie_spełniony_warunek then
      OnOpen = -6000 // spowoduje wyjście z firmy
   else
      OnOpen = 0
   endif

endsub


W którym miejscu w raportach wstawić tą procedurę, lub gdzie jest ta procedura ?

OK już znalazłem :)

Autor:  wars1977 [ 2014-05-13, 14:23 ]
Tytuł:  Re: [VBA] Wyłączenie HMF 2014a z poziomu VBA

rafal pisze:
W AmBasic Obiektem aplikacji

Kod:
dispatch app = GetApplication()


Potem obiekt dokumentu sbc

Kod:
doc = App.Documents.OpenDocument("")


potem obiekt MxInter

Kod:
mxInter = doc.CommandDoc("GetMxInterDoc")


potem uruchomienie aplikacji VBA

Kod:
exec = mxInter.ExecuteApp(....)


exec zwróci retVal z procedury sub _EvExecuteApp() po stronie VBA



1. Ok ogarnąłem wszystko poza mxInter.ExecuteApp(....). Co mam wpisać zamiast kropeczek w nawiasie ? nazwę mojej procedury w VBA?

2. retVal zwróci mi w wartość wygenerowaną w mojej funkcji w VBA ?

Autor:  rafal [ 2014-05-13, 15:24 ]
Tytuł:  Re: [VBA] Wyłączenie HMF 2014a z poziomu VBA

Pierwszy parametr to zawsze "0" jeżeli uruchamiasz z AmBasica.
Pozostałe to parametry typu Variant przekazywane do VBA.

Wywołanie ExecuteApp odpala zdarzenie EvExecuteApp() VBA z tymi samymi parametrami.
Co zwróci to zdarzenie za pomocą retVal to znajdzie się w zmiennej exec AmBasica.

Autor:  wars1977 [ 2014-05-15, 07:40 ]
Tytuł:  Re: [VBA] Wyłączenie HMF 2014a z poziomu VBA

rafal pisze:
Pierwszy parametr to zawsze "0" jeżeli uruchamiasz z AmBasica.
Pozostałe to parametry typu Variant przekazywane do VBA.

Wywołanie ExecuteApp odpala zdarzenie EvExecuteApp() VBA z tymi samymi parametrami.
Co zwróci to zdarzenie za pomocą retVal to znajdzie się w zmiennej exec AmBasica.



Czy mógł bym prosić o jakiś przykład w VBA jak obsłużyć to zdarzenie ?. Nigdzie nie mogę znaleźć EvExecuteApp()

Autor:  rafal [ 2014-05-15, 10:30 ]
Tytuł:  Re: [VBA] Wyłączenie HMF 2014a z poziomu VBA

Nie mam gotowego przykładu. Ale może zostać dla Ciebie przygotowany.

Skontaktuj się z Ekspertem.

Autor:  wars1977 [ 2014-05-16, 10:41 ]
Tytuł:  Re: [VBA] Wyłączenie HMF 2014a z poziomu VBA

rafal pisze:
Nie mam gotowego przykładu. Ale może zostać dla Ciebie przygotowany.

Skontaktuj się z Ekspertem.



To napisz mi proszę tylko jak mogę obsłużyć w VBA zdarzenie EvExecuteApp. Coś mam załadować do VBA, jakąś bibliotekę?.

Strona 1 z 1 Strefa czasowa UTC+1godz. [letni]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/