Excel

6 отговора 248 прегледа
#1

Excel

Imam sledniq problem s Excel:

Iskam kato otworq edna Excel stranica da se izpalni macro. Za celta izpolzwam Private Sub Worksheet_Activate()

Rabotata e, 4e ne winagi raboti.

Nqkoj da ima nqkakwi idei.

Blagodarq predwaritelno

Отговор
в отговор на plm #2

Re: Excel

Искаш да кажеш че в събитието Worksheet_Avtivate изпълняваш някакъв макрос ?

Ами може би не винаги работи защото това събитие се извиква само при активиране на съответната страница. Пробвай да използваш събитието Workbook_Open.

Отговор
в отговор на Гeoprи #3

Re: Excel

E da de, to towa mi e problemat. ne znam koga to4no mi e aktiwirana stranicata.

Ako klikna warhu imeto na stranicata bi trqbwalo da q aktiwiram, ama ne winagi stawa i ne moga da razbera zashto. Drugiqt problem e kato izpolzwam Hyperlynk, za da otida na saotwetnata stranica - pak ne se aktiwira

Отговор
в отговор на plm #4

Re: Excel

Значи пич, има 2 вида събития Worksheet_Activate ().
Едното се намира в ThisWorkbook. Това събитие се активира, когато ти стане активен целият XLS файл, т.е. ако в даден момент имаш отворени няколко XLS файла това събитие ще се активира, само когато направиш активен файла. Т.е. когато превключваш между файловете. На тебе това събитие не ти върши работа, и ако използваш него, когато кликнеш на страницата или имаш Hyperlink към страница, то не се задейства. Както казах, задейства се само ако превключваш между файловете.
Другият вид Worksheet_Activate () събитие се намира в страницата и се изпълнява, когато конкретната страница ти стане активна, т.е. точно твоят случай. Ти трябва да си сложиш кода именно в това събитие за конкретната страница. Пример:
Отваряш нов файл. И по принцип имаш вече съществуващи:
Sheet1
Sheet2
Sheet3
ThisWorkbook

Ако искаш твоят код да се изпълнява само при активирането на Sheet3, правиш следното:
Избираш Sheet3 (Double Click) в Project прозореца, след което от лявото Комбо (по принцип пише General в него), избираш Worksheet, и след това от дясното комбо (по принцип пише Declarations в него) избираш Activate. Така ще ти се появи Worksheet_Activate () събитие за конкретната страница (в случая Sheet3). И в него си слагаш кода.
Аз съм с Excel XP и го тествах, винаги се активира при избор на страница или при Hyperlink към текущата страница. Т.е в твоя случай. Не се активира само ако превключваш между отделните приложения, но като гледам това тебе няма да те бърка, май.

Дано да съм успял да обясня проблема както трябва и поне малко да съм ти помогнал

Бии, за да те уважават!
Отговор
в отговор на пpoГЪPMИcт #5

Re: Excel

Blagodarq za otgowora. Wsi4ko, koeto si napisal e to4no taka po princip i az to4no towa prawq.

Problemat oba4e si stoi. Az sam s Office 2000 i tam kato minesh ot edin Sheet kam drug s Hyperlink , kodat w Worksheet_Activate () ne se zadajstwa. Ponqkoga dori i pri klikwane warhu imeto na stranicata ne dejstwa (rqdko , no se slu4wa).

Отговор
в отговор на plm #6

Re: Excel

Под Excel XP нямах никакъв проблем и затова си помислих, че си използвал другото Worksheet_Activate () събитие, затова написах цялото това обяснение. Както и да е.
Успях да намеря Excel 2000 и го тествах, и наистина не се активира Worksheet_Activate, при преминаване от един Sheet към друг, чрез Hyperlink.
Това обаче е бъг в Excel-а. И Microsoft знаят за него още от Excel 97:

[линк]

В документа обаче не пише нищо за Excel 2000, което би трябвало да означава, че бъга не съществува (Или пък има друг документ за Excel 2000, който аз не съм успял да открия). Това обаче на практика не е така като успяхме да се уверим и двамата. Но пък от друга страна бъга е фикснат в Excel XP, което значи че е оправен в самото ХР или пък може би в някой от сървис паковете излезли за Excel 2000, и затова Microsoft не са счели за нужно да направят документ за Excel 2000.
Така че моят съвет е да вземеш да си инсталираш сървис пак (възможно най-последен) за Office 2000. И надявам се проблемът да отпадне.

Ако проблемът не отпадне, вариантите са следните, според мен:
1. Обясняваш на клиента, че проблема е в Excel 2000 и че в новата версия е отпаднал, така че най-доброто решение за него ще е да премине към Excel XP. (Аз така правя и може би затова клиентите са доволни от мене, въпреки че работя много малко с Excel)
2. Ако клиентът продължава да си държи на Excel 2000, за да скърпиш още малко положението, можеш да използваш събитието Workbook_SheetFollowHyperlink, което се намира в ThisWorkbook и там да си сложиш кода. То поне се активира при кликване на Hyperlink (нищо не е сигурно). Е ще трябва и малко да промениш кода, за да следиш Target-а.

И накрая един съвсем приятелски съвет от мен - MS Office Objcet Model е много бъгаво нещо, така че преди да се заемеш с някаква задача си изясни как да я направиш (т.е. кои обекти , методи и т.н. да използваш, където има избор, разбира се), така че да имаш колкото се може по-малко проблеми. Е, това е и въпрос на опит, който аз не знам дали имам. Но иначе като всеки българин, ме бива съвети да давам, де.

Пък някога ако затърсите програмисти на VBA може и да си спомниш за мене.


Е, накрая не ми остава нищо друго освен и да ти пожелая: Успех!

Бии, за да те уважават!
Отговор
в отговор на пpoГЪPMИcт #7

Re: Excel

:-))

Az sashto namerih w sita na Microsoft obqsneniqta za buga. I az kato teb namerih samo za Office 97. Zatowa i popitah tuk.

Kakto i da e ot utre (nadqwam se) minawam na XP.
Hareswa mi strategiqta na Microsoft. Kolko lesno mogat da te nakarat da minesh kam sledwashtata wersiq. Obi4am q taq firma.

Отговор