Strona: [  << <   1   > >>  ]  z  1     
Autor Temat: Procedure too large
Groszek




Typ: neutral
Postów: 12
Zarejestrowany: Sep 2004
Procedure too large

Mam dosyć dużą procedurę tj. cmdClik, w której jest dużo warunków. VB podaje komendę "Procedure too large". Nie bardzo mogę podzielić ją na mniejsze, gdyż cała wykonuje się po kliknięciu jednego przycisku.

[Post edytowany dnia 22-09-2004 23:40 przez Groszek]


_____________________________________________
Groszek.

22-09-2004 23:38
Pokaż profil Groszek  Wyślij email do Groszek   
DJK



Typ: neutral
Postów: 871
Zarejestrowany: Feb 2004

No to wyciągnij fragment z tej procedury, wsadź go do innej i wstaw odwołanie


_____________________________________________
Jeśli można coś zrobić w sposób optymalny to czemu nie

23-09-2004 01:45
Pokaż profil DJK  Wyślij email do DJK   Odwiedź stronę DJK  
Groszek




Typ: neutral
Postów: 12
Zarejestrowany: Sep 2004

B. dziękuję za podpowiedz. Jestem początkujący i nie wiem jak wykonać to co podałeś. Proszę o dokładniejsze wyjaśnienie jak to zrobić. Może i inni początkujący skorzystają.


_____________________________________________
Groszek.

23-09-2004 22:16
Pokaż profil Groszek  Wyślij email do Groszek   
andrey
Łódź



Typ: neutral
Postów: 295
Zarejestrowany: Mar 2003

Witam,
Najpierw małe pytanie do ciebie w jaki sposob korzystasz z funkcji Visual Basic-a? Dajmy na to z funkcji InStr? Piszesz np.:

Private Sub Command1_Click()
  Dim text As String = "Ala ma kota"
  Dim licznik As Integer
 
    licznik = InStr(1,text,"kota"
End Sub

Ten prosty przykładzik sugeruje abyś część kodu wstawił do odpowiednich Funkcji do których odwołasz się ze zdarzenia Command1_Click() np.:

' W module
Privte/Public Function nazwa_mojej_funkcji(ByVal zmienna1 As Typ, ByVal zmienna2 As Typ) As Typ
' zmienna1, zmienna2 są opcjonalne
' Typ: Byte, Integer, String, Long, Single,... itd
' **
' Tu wstawisz odpowiednie instrukcje jakie ma wykonywac funkcja i nadajesz jej wartosci jakie ma zwracac
End Function

W miejscu w którym chcesz sie odwołać do swojej funkcji piszesz:
jakas_zmienna = nazwa_mojej_funkcji(parametery)

Mozesz Stworzyc podprogramy czyli Suby i wtedy piszesz:

Public/Private Sub nazwa_mojego_podprogramu(ByVal zmienna1)
' zmienna1 jest opcjonalan moze jej wogole nie byc
' moze byc wiecej zmiennych beda one parametrami dla podprogramu
' Tu wstawisz instrukcje
End Sub

Aby skorzystac z takiego gotowego porporgramu w miejescu w którym chcesz go wywołać piszesz

Call nazwa)mojego_podporgramu(tu podajesz parametry)

Proponuje ci abyś jeszcze raz przewertował teorie znajdującą się tutaj http://www.coderscity.pl/no-vb4all/teoria/teoria.htm Przejrzyj też archiwalne numery VBmagazine jest w nich sporo artykułów dla początkujących http://www.coderscity.pl/no-vb4all/vbm/index.htm Na końcu wybierz sobie jakiś projekt z Workshopu i spróbuj go przeanalizować, nie tyle pod względem tego co robi ale w jaki sposób używane są poprogramy lub funkcje

W razie pytań nie krepuj sie na forum, jesteśmy tu poto by sobie pomagać
Pozdrawiam
Andrzej

[Post edytowany dnia 24-09-2004 00:24 przez andrey]


_____________________________________________
http://www.carbondesign.pl/ - rowery poziome, trójkołówce, handbike-i, tuning, akcesoria

24-09-2004 00:23
Pokaż profil andrey  Wyślij email do andrey   Odwiedź stronę andrey       3078613
Groszek




Typ: neutral
Postów: 12
Zarejestrowany: Sep 2004

Dziękuję. Troszkę mi się rozjaśniło. Spróbuję teraz to zastosować.


_____________________________________________
Groszek.

24-09-2004 01:02
Pokaż profil Groszek  Wyślij email do Groszek   
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

A odwoływując się do Twojego problemu to wystarczy zamienić kod
Private Function Command1_Click()
blebleble
blebleble
blebleble
Dalej1
End sub
Sub Dalej1()
blebleble
blebleble
blebleble
end sub


... A jeżeli dalej będzie się wybijać to dziel podobnie aż dotąd, aż przestanie się czepiać


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

24-09-2004 19:37
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
Groszek




Typ: neutral
Postów: 12
Zarejestrowany: Sep 2004

Dzięki mikmas! Bardzo mi się ten sposób podoba. Zastosowałem go, ale nie chodzi. Pewnie popełniam jakieś błędy. W części "blebleble" po Sub Dalej1() nie widzi finkcji (wbudowanychVB). Widzi np. obsługę błędów bo powtarza MsgBox-a z poprzedniej procedury. Czy musi być Private Function Command1_Click(), czy może być Private Sub....? Deklaracje zmiennych przeniosłem do Option Explicit, ale to nie pomogło. Powtórzyłem deklaracje i nadanie wartości zmiennych i stałych w procedurze Sub Dalej1(), ale to też nic nie dało.


_____________________________________________
Groszek.

26-09-2004 13:52
Pokaż profil Groszek  Wyślij email do Groszek   
andrey
Łódź



Typ: neutral
Postów: 295
Zarejestrowany: Mar 2003

Witaj,
Czy chodzi ci o to:
' w kodzie formy:
Private Sub Command1_Click()
' Tu umieścimy naprawdę wielką procedurę podzieloną na części
' Przykładowe użycie zmiennej/zmiennych w podprogramie lub nie używania ich wcale

Dim tekst As String
Dim licznik As Integer
Dim prawda As Boolean
tekst = "www.vb4all.canpol.pl"
licznik = 1
prawda = True
Call podprogram_1(tekst)
Call podprogram_2(tekst, licznik, prawda)
Call podprogram_3
End Sub

' W module:
Public Sub podprogram_1(ByVal tekst As String)
' Tu umieść kod który ma być wykonany
End Sub

Public Sub podprogram_2(ByVal tekst As String, ByVal licznik As Integer, ByVal prawda As Boolean)
' Tu umieść kod który ma być wykonany
End Sub

Public Sub podprogram_3()
' Tu umieść kod który ma być wykonany
End Sub


Czy jak tak podzielisz program wszystko działa? Jakie wbudowane funkcje VB ci nie działały? I czym się to objawiało?

Pozdrawiam
Andrzej

[Post edytowany dnia 27-09-2004 00:04 przez andrey]


_____________________________________________
http://www.carbondesign.pl/ - rowery poziome, trójkołówce, handbike-i, tuning, akcesoria

27-09-2004 00:03
Pokaż profil andrey  Wyślij email do andrey   Odwiedź stronę andrey       3078613
Groszek




Typ: neutral
Postów: 12
Zarejestrowany: Sep 2004

Bardzo dziękuję wszystkim, którzy odpowiedzieli na mój post. Wiadomości zdobyte od Was pozwoliły mi rozwiązać problem.
Do podzielenia zbyt długiej pewnie procedury zastosowałem polecenie Call. W miejscu "jakimś tam" wpisałem Call nazwa_podprogramu. Następnie w oddzielnej procedurze Private Sub nazwa_podprogramu()... End Sub wpisałem dalszy kod aplikacji. Problem polegał na tym, że musiałem niektóre zmienne przenieść do Option Explicit, a niektóre powtórzyć. W każdym podprogramie musiałem też powtórzyć obsługę błędów.
Pewnie sposoby podane przez Was są lepsze, ale będę mógł je sprawdzić dopiero nieco później. Póki co poszedłem tropem podanym przez mikmas-a i dodałem to polecenie Call co dało pożądane rezultaty.
W zasadzie to co zrobiłem zbierzne jest z tym co zaproponował andrey.
Jeszcze raz bardzo Wam dziękuję.

[Post edytowany dnia 27-09-2004 09:59 przez Groszek]


_____________________________________________
Groszek.

27-09-2004 09:53
Pokaż profil Groszek  Wyślij email do Groszek   
mikmas
From Łódź Stadt




Typ: neutral
Postów: 772
Zarejestrowany: Apr 2003

Call? Hmm... dziwne! Bez niego też powinno działać, ale skoro już wszystko działa, to cieszę się, że choć trochę pomogłem


_____________________________________________
4C;65;70;69;65;6A;20;62;79;9C;20;73;69;EA;20;
62;61;72;64;7A;69;65;6A;20;73;6B;6F;6E;63;65;
6E;74;72;6F;77;61;B3;20;6E;61;20;6F;64;70;6F;
77;69;65;64;7A;69;2C;20;61;20;6E;69;65;20;6E;
61;20;72;6F;7A;73;7A;79;66;72;6F;77;79;77;61;
6E;69;75;20;3A;50

29-09-2004 21:28
Pokaż profil mikmas  Wyślij email do mikmas   Odwiedź stronę mikmas       3632553
Wszystkich odpowiedzi: 9 :: Maxymalnie na stronę: 20
Strona: [  << <   1   > >>  ]  z  1