ID tematu: 75916
|
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
|
|
|
|
|
|
|
Tajan
Pomógł: 5573 razy Posty: 12088
|
Wysłany: 15-06-2024, 18:30
|
|
|
Zbędne "End If" usunąłeś? |
|
| ID posta:
435868
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
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
|
|
|
|
|
|
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. (zauważ, że brak słowa Private) a w Ten_skoroszyt umieść:
Kod: | Private Sub Workbook_Open()
ProtectSheets
End Sub |
|
|
| ID posta:
435912
|
|
|
|
|
|
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
|
|
|
|
|
|
|
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
|
|
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
|