Excel Forum - Porady, Pomoc,  Excel Help, Excel FAQ Strona Główna
 FAQ  RegulaminRegulamin  Szukaj   Użytkownicy   Grupy   Rejestracja   Profil   Twoje wiadomości   Zaloguj 


Poprzedni temat «» Następny temat
ID tematu: 27885 Skopiuj do schowka 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 Skopiuj do schowka
 
 
 

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 Skopiuj do schowka
 
 

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 Skopiuj do schowka
 
 
 
A.Ponkowski
słuchacz



Posty: 13
Wysłany: 2012-02-07, 22:38   

Witam

Po prostu może spróbuj to:
http://www.pcworld.pl/new...szu.Excela.html

lub

http://office.microsoft.c...P010066252.aspx
ID posta: 147825 Skopiuj do schowka
 
 

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 Skopiuj do schowka
 
 
 
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 Skopiuj do schowka
 
 

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 Skopiuj do schowka
 
 
 
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 Skopiuj do schowka
 
 

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 Skopiuj do schowka
 
 
 
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 Skopiuj do schowka
 
 

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 Skopiuj do schowka
 
 
 
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. :mrgreen:
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 Skopiuj do schowka
 
 

EXCELFORUM.pl POLECA - Bezplatne triki prosto na skrzynke email

Wyświetl posty z ostatnich:   
Odpowiedz do tematu
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

Skocz do:  

Powered by phpBB modified by Przemo © 2003 phpBB Group
Theme xandgreen created by spleen& Programosy modified v0.3 by warna
Opieka techniczna www.marketingNET.pl

Archiwum