ID tematu: 27885
 |
błąd przy włączaniu ochrony |
| Autor |
Wiadomość |
margerytka
EXCELent Man


Pomogła: 3 razy Posty: 119
|
Wysłany: 2012-02-07, 16:10 błąd przy włączaniu ochrony
|
|
|
Witajcie!
Mam w swoim pliku, w ThisWorkbook taki kod:
| Kod: | Private Sub Workbook_Open()
With Worksheets("oczekujące wpływ realizacja")
.Protect , UserInterfaceOnly:=True
.EnableOutlining = True
End With |
Generalnie działał dobrze do tej pory, czyli plik był wielokrotnie otwierany przez różnych użytkowników i wszystko było w porządku.
Dzisiaj jeden z odbiorców dał mi znać, że makro zatrzymuje się na linii:
| Kod: | | .Protect , UserInterfaceOnly:=True |
Wiem, że trudno coś powiedzieć więcej bez kontekstu, ale na razie nie mam szerszego. Pytanie jest, czy możemy domniemywać, że użytkownik wykonał jakieś dodatkowe działanie (nie wiem, otworzył w międzyczasie inny plik, ma jakieś ustawienia na swoim kompie)?. Wiem, że ma Office'a 2010. O co mogę go jeszcze zapytać, co wyjaśni kwestię lub jak poprawić kod? Może polskie litery w nazwie arkusza? Albo powinnam do arkusza się inaczej odwołać? |
_________________ Pozdrawiam
Margerytka |
|
 | ID posta:
147764
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
Artik


Pomógł: 1277 razy Posty: 3463
|
Wysłany: 2012-02-07, 16:24
|
|
|
Ja domniemuję, że założono ręcznie hasło na dany arkusz.
Przedstawiony kod ma za zadanie tylko chronić arkusz, bez hasła.
Artik |
|
 | ID posta:
147766
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
margerytka
EXCELent Man


Pomogła: 3 razy Posty: 119
|
Wysłany: 2012-02-07, 21:50
|
|
|
Na pewno nie ma hasła. Jestem pewna, ponieważ plik rozesłałam do większej grupy odbiorców i zarówno u mnie, jak i u nich wszystko jest ok, a error wyskakuje tylko jednej osobie. Stąd wydaje mi się, że coś jednocześnie robi, albo ma jakieś preferencje ustawione. Nie mogę za bardzo stanąć nad nią i prześledzić, co robi, bo to przełożony wysokiego szczebla i jakoś tak nie bardzo, zwłaszcza, że nie czuję się na tyle mocna, żeby wiedzieć, co sprawdzać...
A, co więcej, ta osoba, dostawała wcześniej już raport z takim samym kodem i jej działał, teraz był przesłany tylko update danych w arkuszu.
Na razie wymyśliłam tyle, że przerzucę tę ochronę na BeforeSave i kod będzie się wykonywał tylko u mnie przy modyfikacji raportu i zapisywaniu zmian... Kod jest w sumie po to, żeby raz, przy aktualizacji nie zapomnieć o ochronie (zresztą, litości, tak zakładać codziennie ochronę na 15 arkuszach), no a druga rzecz, na arkuszu jest grupowanie.
Ale, kurcze, nie do końca to rozwiązanie mi się podoba... |
_________________ Pozdrawiam
Margerytka |
|
 | ID posta:
147818
|
|
|
 |
A.Ponkowski
słuchacz


Posty: 13
|
|
 | ID posta:
147825
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
margerytka
EXCELent Man


Pomogła: 3 razy Posty: 119
|
Wysłany: 2012-02-08, 09:47
|
|
|
| No wlasnie nie bardzo. Wlasnie po to jest makro, zeby nie robic tego recznie. Jest to raport skladajacy sie z kilkunastu zakladek, z ktorych kazda jest update'owana codziennie. Czyli musialabym codziennie zdejmowac ochrone, wprowadzac dane i zakladac. Generalnie pracochlonne... |
_________________ Pozdrawiam
Margerytka |
|
 | ID posta:
147855
|
|
|
 |
Artik


Pomógł: 1277 razy Posty: 3463
|
Wysłany: 2012-02-08, 22:00
|
|
|
Czy Workbook_Open jest jedyną odpalaną procedurą w tym pliku?
Czy docelowy użytkownik korzysta jeszcze z jakichś makr, czy tylko "ogląda" raporty?
Artik |
|
 | ID posta:
147948
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
margerytka
EXCELent Man


Pomogła: 3 razy Posty: 119
|
Wysłany: 2012-02-10, 23:09
|
|
|
| Cytat: | | Czy Workbook_Open jest jedyną odpalaną procedurą w tym pliku? |
tak
| Cytat: | | Czy docelowy użytkownik korzysta jeszcze z jakichś makr, czy tylko "ogląda" raporty? |
tylko ogląda
jak przerobiłam ten fragment, czyli żeby się nie uruchamiał przy starcie, to po odpaleniu formatki tytułowej, zaczęło mu się wywalać z kolei na
| Kod: | Private Sub Image7_Click()
ThisWorkbook.Worksheets("kaskada reklamacji").Select
Unload Me
|
Mam wrażenie, że odpala kilka pliików w jednej istancji excela? Nie wiem, czy to słuszny trop, ale jak sama tak zrobiłam, że otworzyłam w tzw. jednym oknie dwa pliki i próbowałam uruchomić kod z formatki (ale "aktywny" jest ten inny plik) to wtedy mam błąd. Czyli szuka w aktywnym skoroszycie tego konkretnego obiektu/arkusza i go nie znajduje. Dobrze kombinuję?
A jeżeli mam rację, to jak napisać np. powyższy kod, żeby otwierał ten konkretny arkusz w tym konkretnym pliku, niezależnie od tego, ile jest otwartych i który jest "na wierzchu"? |
_________________ Pozdrawiam
Margerytka |
|
 | ID posta:
148279
|
|
|
 |
Artik


Pomógł: 1277 razy Posty: 3463
|
Wysłany: 2012-02-11, 14:03
|
|
|
Przyznam, że trudno mi rozszyfrować jak działa plik po zmianach, bo podajesz tylko strzępy informacji.
| margerytka napisał/a: | to po odpaleniu formatki tytułowej, zaczęło mu się wywalać z kolei na
| Kod: | Private Sub Image7_Click()
ThisWorkbook.Worksheets("kaskada reklamacji").Select
Unload Me |
| Rozumiem, że jest to fragment kodu z modułu formularza UserForm. Nie wiemy nic w jaki sposób doszło do odpalenia tego formularza.
| margerytka napisał/a: | | próbowałam uruchomić kod z formatki (ale "aktywny" jest ten inny plik) to wtedy mam błąd. Czyli szuka w aktywnym skoroszycie tego konkretnego obiektu/arkusza i go nie znajduje. Dobrze kombinuję? | W miarę dobrze.
Kwalifikator ThisWorkbook wksazuje na skoroszyt z którego uruchomiono ten kod.
W przypadku, gdy kod jest w jednym skoroszycie (w danej chwili skoroszyt nieaktywny), a aktywnym jest inny skoroszyt to faktycznie przedstawiona procedura nie zadziała prawidłowo.
Skojarz tą sytuację z twoim zachowaniem gdybyś miała to zrobić ręcznie. Np. mamy jeden skoroszyt o nazwie Skoroszyt1, w którym jest między innymi arkusz o nazwie Arkusz1, oraz drugi skoroszyt o nazwie Skoroszyt2. Otwarte są oba, aktywnym jest Skoroszyt2. Naszym zadaniem jest aktywowanie arkusza Arkusz1 z pierwszego skoroszytu. Co najpierw robimy? Ano aktywujemy Skoroszyt1, a następnie aktywujemy Arkusz1 w nim zawarty. I podobnie trzeba kodem, najpierw aktywować skoroszyt, a dopiero potem arkusz w nim zawarty. Czyli powyższy kod powinien wyglądać tak: | Kod: | Private Sub Image7_Click()
ThisWorkbook.Activate
ThisWorkbook.Worksheets("kaskada reklamacji").Activate
Unload Me
End Sub | Ale przyznam, że to w żaden sposób nie przybliża nas do rozwiązania zagadki z pierwszego postu.
Tak sobie leżę i analizuję wypowiedzi: | margerytka napisał/a: | Dzisiaj jeden z odbiorców dał mi znać, że makro zatrzymuje się na linii: | Kod: | | .Protect , UserInterfaceOnly:=True |
| Czy pojawia się jakiś komunikat zanim zostanie podświetlona na żółto wspomniana linia? Jeśli tak, to chętnie poznam treść komunikatu i numer błędu. Jeżeli nie ma żadnego komunikatu - może to świadczyć o uszkodzeniu projektu.
| margerytka napisał/a: | | Na razie wymyśliłam tyle, że przerzucę tę ochronę na BeforeSave i kod będzie się wykonywał tylko u mnie przy modyfikacji raportu i zapisywaniu zmian | Muszę cię niestety rozczarować. Tryb specjalny ochrony (UserInterfaceOnly:= True) jest ulotny. Po ponownym otwarciu skoroszytu arkusz jest chroniony "normalnie". Tak więc proste przerzucenie kodu do BeforeSave nic nie da.
Z drugiej strony, skrócenie kodu do postaci: | Kod: | Private Sub Workbook_Open()
With Worksheets("oczekujące wpływ realizacja")
.EnableOutlining = True
End With
End Sub | też nic nie da, bo żeby zadziałało grupowanie w chronionym arkuszu, to arkusz musi być chroniony w trybie specjalnym. Czyli minimalny kod musi być taki jak napisałaś na początku.
| margerytka napisał/a: | | (zresztą, litości, tak zakładać codziennie ochronę na 15 arkuszach) | To się akurat da dość prosto rozwiązać, przez sprawdzenie obecności pliku o nazwie np. Ala_ma_kota.xxx, który będzie występował tylko na twoim komputerze. Zawartość pliku jest nieistotna (może być pusty), ważne tylko żeby istniał. Piszesz wtenczas warunek sprawdzający czy plik jest. Jeżeli jest to znaczy, że ma uruchomić jakąś procedurę (np. założenie ochrony na arkusze), jeżeli go nie ma, to nie ma się nic wykonywać. Proste jak budowa cepa. Ale to grupowanie... tu jest problem.
Na razie nie przychodzą mi do głowy żadne inne pomysły co może być powodem błędu, o którym piszesz w pierwszym poście.
Artik |
|
 | ID posta:
148313
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
margerytka
EXCELent Man


Pomogła: 3 razy Posty: 119
|
Wysłany: 2012-02-14, 15:37
|
|
|
Hej
na razie nic nie odpisuję, bo mi rzeczona osoba "z problemami" na jakieś wolne wybyła i nie mam królika doświadczalnego. Jak królik wróci, napiszę co dalej było. Na razie wprowadziłam kod aktywujący arkusze przed ich wybraniem, mam nadzieję, że to rozwiąże, przynajmniej częściowo, problem.
A czym się różni: | Kod: | | ThisWorkbook.Worksheets("kaskada reklamacji").Activate | od | Kod: | | ThisWorkbook.Worksheets("kaskada reklamacji").Select | ? |
_________________ Pozdrawiam
Margerytka |
|
 | ID posta:
148813
|
|
|
 |
Trebor
Excel Expert

Pomógł: 1085 razy Posty: 2319
|
Wysłany: 2012-02-14, 17:48
|
|
|
Można aktywować arkusz ukryty, ale nie można takiegoż wybrać.
Generalnie: aktywujemy pojedynczy element kolekcji, a wybrać możemy wiele. |
_________________ Trebor |
|
 | ID posta:
148829
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
margerytka
EXCELent Man


Pomogła: 3 razy Posty: 119
|
Wysłany: 2012-02-16, 16:00
|
|
|
Dorwałam się do laptopa "pana z problemem"
Po odpaleniu pliku, otwiera się formatka startowa raportu, ale po wybraniu któregoś przycisku przenoszącego do któregoś arkusza pojawia się komunikat:
| Cytat: | | Can't exit design mode because Control 'Command1Button can not be created |
Załączam rzeczony plik.
Faktycznie, zupełnie nie pomyślałam o tym, że ta ochrona będzie tak ulotna. Dlatego na razie "ochraniają się" tylko arkusze, na których nie ma grupowania. Grupowanie jest tylko na jednym z nich. Komunikat pojawia się przy pliku w załączonej postaci.
Odbiorca otwiera tylko plik i porusza się po nim przyciskami. Natomiast raportowiec w momencie rozpoczęcia pracy wchodzi w Arkusz --> Odkryj --> konfiguracyjny i wybiera przycisk wersji roboczej, potem przed przesłaniem do ogółu wybiera drugi przycisk wersji do prezentacji (wtedy ukrywają się wszystkie robocze arkusze, zakładają ochrony itp.)
plik.rar
|
Pobierz Plik ściągnięto 14 raz(y) 81.01 KB |
|
_________________ Pozdrawiam
Margerytka |
|
 | ID posta:
149134
|
|
|
 |
Artik


Pomógł: 1277 razy Posty: 3463
|
Wysłany: 2012-02-17, 23:53
|
|
|
Maggie, przechlapany ten "twój" błąd.
Bill używa okrągłych słówek na ten temat. W Word-zie zaleca skompilowanie kodu, w innych aplikacjach proponuje... zajrzeć do helpa.
Na innych forach też nic ciekawego nie znalazłem.
Cóż, pozostaje działać po omacku.
1. U mnie twój plik nie wywoływał żadnych błędów, podobnie jak u wielu twoich użytkowników. Można więc wykoncypować sobie np. że u "królika" zepsuł się Excel. Być może, że kliknięcie w Pomoc/Wykryj i napraw coś pomoże.
2. Przeglądając dostarczony "towar" zauważyłem, że na arkuszach istnieją przyciski z paska narzędziowego "Przybornik formantów". Mają one domyślnie właściwość TakeFocusOnClick ustawioną na True. Zmień we wszystkich arkuszach, gdzie występują takie przyciski na wartość False. Znane są przypadki (na tym forum chyba dwukrotnie miałem z tym do czynienia), że ustawienie domyślne (True) powodowało problemy w działaniu kodu. Zmień i zawsze rób to w przyszłości. A najlepiej, jeśli nic nie stoi na przeszkodzie, używaj przycisków z paska Formularze, gdyż widzę z praktyki, że formanty ActiveX nie są zbyt dobrze dopracowane do współdziałania z arkuszami.
3. Jeszcze jedna myśl namolnie powraca - to uszkodzenie projektu. Co prawda u wszystkich (poza "królikiem") działa, ale nie zaszkodzi projekt oczyścić. Czyszczenie polega na wyeksortowaniu wszystkich modułów w znane ci miejsce, usunięciu całego kodu z projektu (może warto też usunąć formanty ActiveX z arkuszy), zapisaniu pliku i zaimportowaniu modułów spowrotem. Przy imporcie kod zawarty w modułach arkuszy pojawi ci się w modułach klas. Należy go ręcznie przekopiować do odpowiednich modułów arkuszy, a moduły klas usunąć. Jeżeli usunęłaś przyciski ActiveX z arkuszy, to zbuduj je ponownie lub zastąp przyciskami z paska Formularze, poprawiając też kod. Po całej operacji plik ponownie zapisać.
Powodzenia życzę.
I daj znać jak by coś pomogło.
Artik |
|
 | ID posta:
149307
|
|
|
 |
|
EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email
|
|
|
Nie możesz pisać nowych tematów Nie możesz odpowiadać w tematach Nie możesz zmieniać swoich postów Nie możesz usuwać swoich postów Nie możesz głosować w ankietach Nie możesz załączać plików na tym forum Możesz ściągać załączniki na tym forum
|
Dodaj temat do Ulubionych Wersja do druku
|
| |
| |