още едно въпросче
11 отговора
195 прегледа
още едно въпросче
Сигурно вече досаждам, но да попитам.
Опитвам се да премина от един Sub в друг. Правя го через call, но ми се изчистват моментните стойности на променливите, които искам да използвам в другия. Например:
Sub smetki()
Dim i As Integer
For i = 1 To 10
If i = Cells(1, 1) Then Call danni
Next
End Sub
Sub danni()
Cells(2, 2) = i
End Sub
Къде бъркам и как да постъпя?
Опитвам се да премина от един Sub в друг. Правя го через call, но ми се изчистват моментните стойности на променливите, които искам да използвам в другия. Например:
Sub smetki()
Dim i As Integer
For i = 1 To 10
If i = Cells(1, 1) Then Call danni
Next
End Sub
Sub danni()
Cells(2, 2) = i
End Sub
Къде бъркам и как да постъпя?
Re: още едно въпросче
Хахаха, ето това вече си е за книги да четеш. ;о) Защо не четеш, а? ;о))))
Такаааа, значи променливите могат да са три вида. Процедурни, модулни, и глобални.
Процедурни са променливите, които дефинираш вътре в Sub-а. Те се "виждат" и използват само от конкретната процедура (или функция), в която си ги дефинирал. В съседна процедура (или финкция - няма да го пиша повече, то се подразбира) може да имаш абсолютно същите имена на променливи, но те са други, не са същите, и се "виждат" и използват от нея.
Модулни - тези, които дефинираш "най-отгоре" в модула. Т.е. точно преди самите процедури (още веднъж ще пиша "и функции" но е за последно). Ето така:
Dim strText As String
Sub Chetene()
... neshto si...
End Sub
Sub Zapis()
... neshto si
End sub
В този случай, дефинираната променлива strText ще се "вижда" и от двете процедури, и промените в променливата ще се отразяват без значение къде се използва тя.
Глобалните - се дефинират в "Module" като Global strText As String. Те се виждат от всички модули на програмата, и промените - също са валидни за цялата програма.
Препоръчително е да дефинираш колкото може по-малко глобални променливи, за да нямаш изцепки с повторенията. Не се допуска при дефинирана глобална или модулна променлива с име strText, да дефинираш и процедурна променлива със същото име. затова по унгарската конвенция за префиксите тогава се препоръчваше за модулните и/или процедурните променливи да слагаш още едно m отпред така: Dim mstrText As String, за да личи, че тази променлива е модулна. Разбира се тази конвенция си е отживелица, но аз предпочитам да се придържам към нея, отколкото да правя "собствен стандарт", който да не прилича на нищо. Придържането към стандарт е важно, за бъдеща работа в екип. Когато няколко души пишат една програма заедно - те трябва и да могат да четат кода един на друг.
Хайде поработи малко, и после пак пиши да кажеш до къде си стигнал.
Щирлиц
Такаааа, значи променливите могат да са три вида. Процедурни, модулни, и глобални.
Процедурни са променливите, които дефинираш вътре в Sub-а. Те се "виждат" и използват само от конкретната процедура (или функция), в която си ги дефинирал. В съседна процедура (или финкция - няма да го пиша повече, то се подразбира) може да имаш абсолютно същите имена на променливи, но те са други, не са същите, и се "виждат" и използват от нея.
Модулни - тези, които дефинираш "най-отгоре" в модула. Т.е. точно преди самите процедури (още веднъж ще пиша "и функции" но е за последно). Ето така:
Dim strText As String
Sub Chetene()
... neshto si...
End Sub
Sub Zapis()
... neshto si
End sub
В този случай, дефинираната променлива strText ще се "вижда" и от двете процедури, и промените в променливата ще се отразяват без значение къде се използва тя.
Глобалните - се дефинират в "Module" като Global strText As String. Те се виждат от всички модули на програмата, и промените - също са валидни за цялата програма.
Препоръчително е да дефинираш колкото може по-малко глобални променливи, за да нямаш изцепки с повторенията. Не се допуска при дефинирана глобална или модулна променлива с име strText, да дефинираш и процедурна променлива със същото име. затова по унгарската конвенция за префиксите тогава се препоръчваше за модулните и/или процедурните променливи да слагаш още едно m отпред така: Dim mstrText As String, за да личи, че тази променлива е модулна. Разбира се тази конвенция си е отживелица, но аз предпочитам да се придържам към нея, отколкото да правя "собствен стандарт", който да не прилича на нищо. Придържането към стандарт е важно, за бъдеща работа в екип. Когато няколко души пишат една програма заедно - те трябва и да могат да четат кода един на друг.
Хайде поработи малко, и после пак пиши да кажеш до къде си стигнал.
Щирлиц
Re: още едно въпросче
Втори вариант - да прехвърляш променливата като параметър при извикването на втората процедура:
Така променливата i ще си е процедурна, но при "извикване" на втората процедура, се предава съдържанието и като параметър, чието име може и да не е същото.
Щирлиц
Dim iii As Integer
For i = 1 To 10
If i = Cells(1, 1) Then danni i
Next
End Sub
Sub danni(i As Long)
Cells(2, 2) = i
End Sub
Така променливата i ще си е процедурна, но при "извикване" на втората процедура, се предава съдържанието и като параметър, чието име може и да не е същото.
Щирлиц
Re: още едно въпросче
Благодаря за изчерпателния отговор. Как ти се занимава с такива олигофренчета като мен не знам. Още веднъж благодаря.
Re: още едно въпросче
И аз да питам:
Ако в модула вместо global, си дефинирам променливата public, каква всъщщност е разликата?(знам, не се съмнявам че и Щирлиц, знае просто ми е интересно защо предпочита глобал пред публик)
Наведи главата защото прелитам ниско с асконата !!!
Ако в модула вместо global, си дефинирам променливата public, каква всъщщност е разликата?(знам, не се съмнявам че и Щирлиц, знае просто ми е интересно защо предпочита глобал пред публик)
Наведи главата защото прелитам ниско с асконата !!!
Re: още едно въпросче
Hello world. ;о)))
Извинявам се за ненавременното ми "изчезване" от нета, но пътувах малко извън града за няколко дни.
Та за променливите.
Сигурно искаш да споменеш няколко думи за ActiveX, и за декларирането на "Universal" променливи? Въпрос на вкус е къде и как ще си декларираме променливите. Използвам Global в нормална EXE апликация, и май няма разлика между Global и Public. С ActiveX почти не се занимавам.
Ако имаш повече информация - сподели я. ;о)
Щирлиц
Извинявам се за ненавременното ми "изчезване" от нета, но пътувах малко извън града за няколко дни.
Та за променливите.
Сигурно искаш да споменеш няколко думи за ActiveX, и за декларирането на "Universal" променливи? Въпрос на вкус е къде и как ще си декларираме променливите. Използвам Global в нормална EXE апликация, и май няма разлика между Global и Public. С ActiveX почти не се занимавам.
Ако имаш повече информация - сподели я. ;о)
Щирлиц
Re: още едно въпросче
Не съм много сигурен, но мисля че има разлика в глобал и пъблиц декларацията, ще помоля ако не съм прав да бъда коригиран за да не съм в заблуда!!!
Разликата, доколкото си спомням че съм чел, между глобал и пъблик декларацията е че при публик, променливата е видима за цялото приложение, а при глобал, освен че е видима за цялото приложение е видима и за външни приложения, които работят съвместно с обсъжданото приложение.
Наведи главата защото прелитам ниско с асконата !!!
Разликата, доколкото си спомням че съм чел, между глобал и пъблик декларацията е че при публик, променливата е видима за цялото приложение, а при глобал, освен че е видима за цялото приложение е видима и за външни приложения, които работят съвместно с обсъжданото приложение.
Наведи главата защото прелитам ниско с асконата !!!
Re: още едно въпросче
Правилно, но става въпрос за ActiveX, и така декларираната променлива са я нарекли (в тази книга де) "Universal".
Щирлиц
Щирлиц
Re: още едно въпросче
В спора се ражда истината
Клуба е много готин, жалко че не мога повече да помагам :(
Наведи главата защото прелитам ниско с асконата !!!
Клуба е много готин, жалко че не мога повече да помагам :(
Наведи главата защото прелитам ниско с асконата !!!
Re: още едно въпросче
Niama razlika mezdu public i global tova e osatanalo za syvmestimost s prednite versii
Gloabal, Gosub i oste niakolko gi niama v dokumentaciata na VB6, a vyv VB.NET i sintaxisa na ezika.
[линк]
Gloabal, Gosub i oste niakolko gi niama v dokumentaciata na VB6, a vyv VB.NET i sintaxisa na ezika.
[линк]
бе тва малко съмнително...
и какво става ако две приложения се засекат с еднавки имена на променливите :) - всъщност може би се различават по името на приложението, но пък какво става ако предположим, че има стартирани 2 инстанции на едно приложение?
аз не съм много напред с материала, но мисля че лека полека започвам да хващам тва онова
аз не съм много напред с материала, но мисля че лека полека започвам да хващам тва онова
Re: бе тва малко съмнително...
Ми, би трябвало да можеш да "хванеш" хендъла на програмата...
Щирлиц
Щирлиц