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: 75916 Skopiuj do schowka Skoroszyt ochrona wszystkich arkuszy.
Autor Wiadomość
Raazor 
ExcelGaduła 500+


Wersja: Win Office 2016
Posty: 779
Wysłany: 15-06-2024, 14:22   

Przy każdorazowym uruchomieniu skoroszytu, pojawia się okienko z takim komunikatem:
Kod:
Microsoft Visual Basic for Applications

Compile error in hidden module: Ten_skoroszyt.
This error commonly occurs when cod eis incompatible with.
The version, platform, or architecture of this application. Click
„Help” for information on how to correct this error.
_________________
Raazor
ID posta: 435866 Skopiuj do schowka
 
 
Tajan


Pomógł: 5573 razy
Posty: 12088
Wysłany: 15-06-2024, 18:30   

Zbędne "End If" usunąłeś?
ID posta: 435868 Skopiuj do schowka
 
 
Raazor 
ExcelGaduła 500+


Wersja: Win Office 2016
Posty: 779
Wysłany: 15-06-2024, 19:31   

Nie „ End If „ nie usunąłem.

Ale po usunięciu „ End If ”, przy uruchomieniu skoroszytu pojawia się błąd: Run-time error ‘9’
Kod:
Run-time error 9
Subscript out of range

Natomiast w jednym z arkuszy, po kliknięciu w przycisk np. Sortuj wyskakuje błąd: Run-time error 1004
Kod:
Run-time error 1004:

Nie można uruchomić tego polecenia w chronionym arkuszu. Aby użyć tego
polecenia, należy najpierw usunąć ochronę arkusza (na karcie
Recenzja kliknij grupę Zmiany, a następnie kliknij przycisk Nie chroń
arkusza). Może się pojawić monit o hasło.
_________________
Raazor
ID posta: 435869 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2021
Pomógł: 2642 razy
Posty: 8821
Wysłany: 15-06-2024, 19:57   

Odnośnie "Run-time error 9"
Kod:
    For Each wks In ThisWorkbook.Worksheets(Array("Wykaz", "Plan Urlopów", _
       "Wykaz Telefonów", "Telefony Baza", "Urlop-24"))
Pierwszy raz widzę taką konstrukcję.
Składnia użyta w For Each jest niepoprawna, ponieważ metoda Worksheets nie obsługuje bezpośrednio tablicy arkuszy w ten sposób.

Powinno być tak:
Kod:
    Dim sheetNames As Variant
    Dim wks As Worksheet

    sheetNames = Array("Wykaz", "Plan Urlopów", "Wykaz Telefonów", "Telefony Baza", "Urlop-24")

    For Each wks In ThisWorkbook.Worksheets
        If Not IsError(Application.Match(wks.Name, sheetNames, 0)) Then
            wks.Protect Password:="1234", _
                        DrawingObjects:=False, _
                        Contents:=True, _
                        Scenarios:=False, _
                        AllowFormattingCells:=True, _
                        AllowFormattingColumns:=True, _
                        AllowFormattingRows:=False, _
                        AllowInsertingColumns:=False, _
                        AllowInsertingRows:=False, _
                        AllowInsertingHyperlinks:=False, _
                        AllowDeletingColumns:=False, _
                        AllowDeletingRows:=False, _
                        AllowSorting:=True, _
                        AllowFiltering:=True, _
                        AllowUsingPivotTables:=False, _
                        UserInterfaceOnly:=True
        End If
    Next wks


A "Run-time error 1004" masz dobrze opisany i instruuje Cie co masz zrobić.
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

FB
ID posta: 435870 Skopiuj do schowka
 
 
Raazor 
ExcelGaduła 500+


Wersja: Win Office 2016
Posty: 779
Wysłany: 15-06-2024, 20:31   

Ok. Działa zarówno makro Mareckiego jak i Tajana po usunięciu EndIf (gdzie podczas testów popełniłem błąd przy opisie arkuszy i wklejeniu innego hasła).

Teraz jest dobrze tak jedno jak i drugie makro do wykorzystania.
Dziękuję.
_________________
Raazor
ID posta: 435871 Skopiuj do schowka
 
 
Maciej Gonet 
Excel Expert


Wersja: Win Office 365
Pomógł: 3560 razy
Posty: 10500
Wysłany: 15-06-2024, 21:56   

Marecki napisał/a:
Odnośnie "Run-time error 9"
Kod:
For Each wks In ThisWorkbook.Worksheets(Array("Wykaz", "Plan Urlopów", _
"Wykaz Telefonów", "Telefony Baza", "Urlop-24"))
Pierwszy raz widzę taką konstrukcję.
Składnia użyta w For Each jest niepoprawna, ponieważ metoda Worksheets nie obsługuje bezpośrednio tablicy arkuszy w ten sposób.

Dlaczego uważasz, że taka składnia jest niepoprawna?
Kod:
Worksheets(Array(lista_nazw))
zwraca kolekcję typu Sheets i można jej tak używać. Dowód w załączonym pliku. Jednak nazwy arkuszy muszą być dokładnie zgodne.

Sheets.xlsm
Pobierz Plik ściągnięto 27 raz(y) 19.41 KB

ID posta: 435872 Skopiuj do schowka
 
 
Marecki 
Excel Expert



Wersja: Win Office 2021
Pomógł: 2642 razy
Posty: 8821
Wysłany: 15-06-2024, 22:24   

Masz rację Macieju, mój błąd, przepraszam.
Przy testach wprowadziłem złą nazwę arkusza.
Zamiast "Arkusz 1" wpisałem "Arkusz1" i dostałem Error 9, który sugeruje że próbujemy odwołać się do elementu tablicy, kolekcji lub zakresu, który nie istnieje.
Sorki.
_________________
Hardware - ta część komputera, którą można kopnąć kiedy software przestanie funkcjonować.

FB
ID posta: 435873 Skopiuj do schowka
 
 
Raazor 
ExcelGaduła 500+


Wersja: Win Office 2016
Posty: 779
Wysłany: 17-06-2024, 21:44   

Testuję:
Poniższe makro obecnie wklejone jest do Ten_skoroszyt.
Kod:
Private Sub Workbook_Open()
    Dim wks              As Worksheet
    Dim WksA             As Worksheet
   
    Set WksA = ActiveSheet
    '...
    For Each wks In ThisWorkbook.Worksheets(Array("Wykaz", "Plan Urlopów", _
       "Wykaz Telefonów", "Telefony Baza", "Urlop-24"))
        wks.Protect Password:="1234", _
                    DrawingObjects:=False, _
                    Contents:=True, _
                    Scenarios:=False, _
                    AllowFormattingCells:=True, _
                    AllowFormattingColumns:=True, _
                    AllowFormattingRows:=False, _
                    AllowInsertingColumns:=False, _
                    AllowInsertingRows:=False, _
                    AllowInsertingHyperlinks:=False, _
                    AllowDeletingColumns:=False, _
                    AllowDeletingRows:=False, _
                    AllowSorting:=True, _
                    AllowFiltering:=True, _
                    AllowUsingPivotTables:=False, _
                    UserInterfaceOnly:=True
Next
'....
    WksA.Activate
End Sub

Jak go przerobić, abym mógł wkleić go do Module1, zobaczymy jak będzie się zachowywać.
_________________
Raazor
ID posta: 435898 Skopiuj do schowka
 
 
Tajan


Pomógł: 5573 razy
Posty: 12088
Wysłany: 18-06-2024, 21:28   

Ale, w jakim celu? Co to ma zmienić?
ID posta: 435910 Skopiuj do schowka
 
 
Raazor 
ExcelGaduła 500+


Wersja: Win Office 2016
Posty: 779
Wysłany: 18-06-2024, 21:47   

W Skoroszycie mam ok. 50 arkuszy. Chciałem sprawdzić czy po wklejeniu makra do Module, skoroszyt będzie szybciej się uruchamiał, czy może wyeliminuje to kręcące się kółeczko.
_________________
Raazor
ID posta: 435911 Skopiuj do schowka
 
 
Tajan


Pomógł: 5573 razy
Posty: 12088
Wysłany: 18-06-2024, 22:16   

To raczej niczego nie zmieni, bo czas wykonywania procedury nie zależy od jej lokalizacji lecz od rodzaju czynności jakie ona wykonuje. Ale, jeżeli chcesz się przekonać, to przenieś kod do modułu i zmień nazwę procedury z
Kod:
Private Sub Workbook_Open()
na np.
Kod:
Sub ProtectSheets()
(zauważ, że brak słowa Private) a w Ten_skoroszyt umieść:
Kod:
Private Sub Workbook_Open()
     ProtectSheets
End Sub
ID posta: 435912 Skopiuj do schowka
 
 
Raazor 
ExcelGaduła 500+


Wersja: Win Office 2016
Posty: 779
Wysłany: 19-06-2024, 10:27   

Potestowałem trochę w swoim skoroszycie Makro które wstawiłem do Module1 zamiast do Ten_skoroszyt.

Jest tak, jak napisał powyżej Tajan, a czas wykonywania procedury w obydwu przypadkach w zasadzie był identyczny.

Dziękuję za pomoc.
_________________
Raazor
ID posta: 435914 Skopiuj do schowka
 
 
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.wip.pl

Archiwum

Strona uĹźywa plikĂłw cookies.

Kliknij tutaj, żeby dowiedzieć się jaki jest cel używania cookies oraz jak zmienić ustawienia cookie w przegl�darce.
Korzystając ze strony użytkownik wyraża zgodę na używanie plików cookies, zgodnie z bieżącymi ustawieniami przeglądarki.
SprawdĹş, w jaki sposĂłb przetwarzamy dane osobowe