ID tematu: 72916
 |
Nazwy kodowe arkuszy |
Autor |
Wiadomość |
marzatela
Excel Expert


Zaproszone osoby: 316
Pomogła: 469 razy Posty: 2653
|
Wysłany: 05-06-2022, 17:57 Nazwy kodowe arkuszy
|
|
|
Od zawsze byłam fanką używania w kodzie nazw kodowych arkuszy, ułatwia to wiele spraw. Ostatnio zauważyłam jednak coś, co mnie zaniepokoiło. Dostałam plik Excela - od początku utworzony i edytowany w anglojęzycznej wersji Excela. Wstawiłam tam procedurę w module ogólnym, używając nazw Sheet1, Sheet2 itd.= zgodnie z tym, co widziałam w widoku Projektu. Gdy po kilku tygodniach zajrzałam do tego pliku - nagle okazało się, że kod się nie kompiluje, gdyż nie rozpoznaje tych nazw. I faktycznie - w kodzie zobaczyłam Arkusz1, Arkusz2, Arkusz3.... Ten sam plik - przesłany do odbiorcy "angielskiego" pokazuje Sheet1, Sheet2 itd.
Czy Excel sam zaczął sobie tłumaczyć nazwy kodowe arkuszy? Od kiedy? Ktoś spotkała się z takim zjawiskiem?
W tym przypadku ręcznie pozmieniałam nazwy z Arkuszy na Sheet, ale wydaje mi się to dosyć dziwne. |
_________________ marzatela
http://www.szultaset.pl |
|
 | ID posta:
417770
|
|
|
 |
|
|
|
Rafał B.
ExcelSpec


Wersja: Win Office 2016
Pomógł: 67 razy Posty: 421
|
Wysłany: 06-06-2022, 09:44
|
|
|
Być może da się to ograć jakoś poprzez np. `Application.International(xlCountryCode)`, ale...
...proponowałbym zostawić to teoretykom VBA (tutaj może być sporo niuansów, począwszy od rozróżnienia `Compile-time` vs `run-time`, poprzez ustawienia regionalne Office/systemu, aż po bugi i qurki od Microsoftu- moim zdaniem szkoda na to czasu). W praktyce nie polegaj po prostu na nadawanej arkuszom automatycznej nazwie codename, tylko ustawiaj ją ręcznie poprzez właściwość `(Name)` w VBE (nie mylić z `Name` bez nawiasów). Nadawaj nazwy znaczące, przecież zmiennych też nie nazywasz `Zmienna1`, `Zmienna2` etc, więc dlaczego upierasz się przy stosowaniu `Arkusz1`, `Arkusz2`?
Teraz już nie pamiętam dokładnie, ale chyba analogiczne zamieszanie jest też z wykresami (`Wykres1/Chart1`). Na pewno gdzieś z tym się spotkałem, ale poza codename, bo tam zawsze ustawiam swoją nazwę. |
_________________ Częstym błędem jest zakładanie, że autorzy niezrozumiałego kodu będą w jakiś sposób potrafili wyrazić się jasno i klarownie w komentarzach. Kevlin Henney |
|
 | ID posta:
417781
|
|
|
 |
|
|
marzatela
Excel Expert


Zaproszone osoby: 316
Pomogła: 469 razy Posty: 2653
|
Wysłany: 07-06-2022, 07:46
|
|
|
Wiem, że to trochę teoretyzowanie, ale pierwszy raz się z tym spotkałam i trochę mnie to zaniepokoiło. Pozmieniałam tu nazwy ręcznie, w oknie Exploatora Projektu i wszystko działa.
A własne nazwy też zawsze nadaję - tak jest prościej, szczególnie przy bardziej złożonych projektach. Do tej pory stosowałam to jednak zawsze przy nazwach wykresów, modułów ogólnych VBA itp. Nazwy kodowe arkuszy zmieniałam bardzo rzadko. Może pora zmienić przyzwyczajenia? |
_________________ marzatela
http://www.szultaset.pl |
|
 | ID posta:
417815
|
|
|
 |
|
|
bodek

Wersja: Win Office 2019
Pomógł: 1060 razy Posty: 3125
|
Wysłany: 07-06-2022, 22:19
|
|
|
Ja mam zupełnie inne doświadczenie w tej kwestii.
Nazwa kodowa nadana przez użytkownika np: Arkusz1 pozostaje bez zmiany u userów z inną wersją językową. Wielokrotnie widziałem różne dziwne nazwy kodowe, np francuskie "Feuille1" czy jakoś tak , pomieszane z Sheets1 itd. i wg mnie nie ulegają one zmianom podczas przesyłania userom z różnymi wersjami językowymi. Podejrzewam interwencję osób, które dostały taki plik. |
|
 | ID posta:
417838
|
|
|
 |
|
|
Rafał B.
ExcelSpec


Wersja: Win Office 2016
Pomógł: 67 razy Posty: 421
|
Wysłany: 07-06-2022, 22:43
|
|
|
bodek napisał/a: | Nazwa kodowa nadana przez użytkownika np: Arkusz1 pozostaje bez zmiany |
Ale my tu rozmawiamy nie o nadanej nazwie przez użytkownika, a nazwie nadanej automatycznie przez IDE (VBE). Krótka kwerenda internetowa wskazuje, że taki problem występował, być może jedynie w niektórych wersjach Office (m.in. ozgrid, SO). W przypadkach problemów z regionalizacją zalecam szukania po źródłach niemieckich, bo tam sporo kodu powstało i jest opisanych więcej bugów po Internecie niż w wersji polskiej. Ale oczywiście ingerencja osób trzecich nigdy nie jest wykluczona... W każdym razie nadawanie swoich nazw arkuszom i modułom jest praktyką słuszną i zalecaną analogicznie do zmiennych, więc po co ryzykować.
Jak będę miał dostęp do Windows i Excela, to mam pewne przypuszczenie źródła błędu i pomysł na test, jeśli się powiedzie, to dam znać. |
_________________ Częstym błędem jest zakładanie, że autorzy niezrozumiałego kodu będą w jakiś sposób potrafili wyrazić się jasno i klarownie w komentarzach. Kevlin Henney |
|
 | ID posta:
417839
|
|
|
 |
|
|
marzatela
Excel Expert


Zaproszone osoby: 316
Pomogła: 469 razy Posty: 2653
|
Wysłany: 08-06-2022, 06:38
|
|
|
Tak, zdecydowanie chodzi mi o nazwy nadawane automatycznie. Też miałam do czynienia z plikami tworzonymi w niemieckiej wersji Excela i nazwy kodowe arkuszy trzymały swoje niemieckie nazwy. Dlatego teraz jestem tak zaskoczona.
Postaram się dziś ściągnąć taki prosty plik utworzony u klienta w UK, wrzucę go, żeby można było sprawdzić jak to wygląda u innych. Tego z danymi nie mogę. |
_________________ marzatela
http://www.szultaset.pl |
|
 | ID posta:
417842
|
|
|
 |
|
|
marzatela
Excel Expert


Zaproszone osoby: 316
Pomogła: 469 razy Posty: 2653
|
Wysłany: 08-06-2022, 10:03
|
|
|
W załączeniu plik utworzony w angielskim Excelu (cały komputer, w tym Windows - jest ustawiony na Londyn). Gdy otwieram u siebie - widzę przetłumaczone nazwy kodowe, nazwy arkuszy zachowane. W drugą stronę (czyli plik utworzony u mnie, wyświetlony w UK) też przetłumaczony.
testJacek.xlsx
|
Pobierz Plik ściągnięto 58 raz(y) 10.59 KB |
|
_________________ marzatela
http://www.szultaset.pl |
|
 | ID posta:
417847
|
|
|
 |
|
|
Maciej Gonet
Excel Expert

Wersja: Win Office 365
Pomógł: 3265 razy Posty: 9582
|
Wysłany: 08-06-2022, 12:26
|
|
|
Mogę potwierdzić tę obserwację i wygląda, że jest to cecha pliku, a nie wersji Excela.
Próbowałem otwierać ten plik w wersji 365 amerykańskiej i widzę angielskie nazwy kodowe, a w polskiej - polskie nazwy kodowe. Sprawdzałem też w wersji polskiej Ex 2010 i widać też polskie nazwy kodowe arkuszy (nazwy "zakładkowe" są zawsze angielskie).
Natomiast przy tworzeniu nowych plików w 365 i ich otwieraniu w dwóch wersjach językowych na przemian widzę zmiany trudne do przewidzenia. Raz nazwa kodowa się zmienia, innym razem nie. Natomiast nazwa "zakładkowa" pozostaje stabilna.
W odniesieniu do plików wcześniej utworzonych (w wersji polskiej), wydaje mi się, że nazwa kodowa nie ulega zmianie. |
|
 | ID posta:
417852
|
|
|
 |
|
|
marzatela
Excel Expert


Zaproszone osoby: 316
Pomogła: 469 razy Posty: 2653
|
Wysłany: 08-06-2022, 14:29
|
|
|
Co rozumiesz przez pojęcie cecha pliku? Plik, w którym po raz pierwszy to zauważyłam to nie plik załączony. Ten plik testowy powstał dziś, właśnie dla sprawdzenia zjawiska.
Zakładkowe nazwy faktycznie są stałe, ale nigdy nie wiadomo, na jaki pomysł wpadnie użytkownik końcowy, więc nie lubię ich stosować w bardziej złożonych projektach. |
_________________ marzatela
http://www.szultaset.pl |
|
 | ID posta:
417862
|
|
|
 |
|
|
Maciej Gonet
Excel Expert

Wersja: Win Office 365
Pomógł: 3265 razy Posty: 9582
|
Wysłany: 08-06-2022, 16:43
|
|
|
To jest moja hipoteza. "Cecha pliku" w tym sensie, że informacja o tym, że plik tak ma się zachowywać jest zapisana gdzieś w pliku. Oczywiście tę informację musi generować nowy Excel i to od stosunkowo niedawna.
Dawniej takiego zachowania nikt nie obserwował, a gdy otworzyłem Twój plik w starym Excelu (2010), to również nazwy kodowe zmieniły się na polskie.
Pliki starsze, utworzone kilka tygodni temu i wcześniej nie mają tej cechy (to znaczy utworzone w wersji polskiej zachowują polską nazwę kodową również po otwarciu w wersji angielskiej).
Z plikami utworzonymi dziś do testów zauważyłem dziwne zjawisko. Pliki te kilkakrotnie naprzemiennie otwierałem i zapisywałem w wersji amerykańskiej i polskiej. Początkowo każdorazowo nazwy kodowe się zmieniały, ale po kilku próbach nastąpiła dziwna stabilizacja - w pliku utworzonym pierwotnie w wersji polskiej utrwaliły się angielskie nazwy kodowe, a w tym, utworzonym w wersji angielskiej - nazwy polskie. Ale to jest tylko pojedyncza obserwacja, nie należy jej uogólniać. |
|
 | ID posta:
417869
|
|
|
 |
|
|
marzatela
Excel Expert


Zaproszone osoby: 316
Pomogła: 469 razy Posty: 2653
|
Wysłany: 08-06-2022, 17:26
|
|
|
Coś w tym może być. Wcześniej wielokrotnie zdarzało mi się pracować na plikach w różnych wersjach językowych i nigdy się nie spotkałam z takim zjawiskiem. Pierwszy raz zdarzyło mi się to w ubiegłym tygodniu i dlatego zaczęłam drążyć temat.
Można sobie z tym poradzić, wystarczy ręcznie pozmieniać nazwy kodowe i wówczas wszystko jest OK. trzeba jednak wiedzieć, e taki problem jest. Inaczej można się zamęczyć wyszukiwaniem przyczyn błędu. |
_________________ marzatela
http://www.szultaset.pl |
|
 | ID posta:
417872
|
|
|
 |
|
|
Kaper


Zaproszone osoby: 2
Wersja: Win Office 365
Pomógł: 4420 razy Posty: 8743
|
Wysłany: 09-06-2022, 09:49
|
|
|
Potwierdzam występowanie zjawiska. Plik po otwarciu w excelu 365 ustawionym na angielski miał angielskie nazwy kodowe. Natomiast po zamknięciu (bez zapisu) zmiany opcji językowych excela na PL, zamknięciu programu i ponownym otwarciu pliku pojawiły się polskie nazwy kodowe arkuszy. Co więcej, pojawił się Ten_skoroszyt. No ale z nim jak wiadomo nie ma kłopotu, bo działa ThisWorkbook nawet gdy widzimy Ten_skoroszyt
czyli pierwsze 3 powyżej OK, 4 nie
Kod: | Debug.Print Ten_skoroszyt.Sheets.Count
Debug.Print Arkusz2.Columns(1).Cells.Count
Debug.Print ThisWorkbook.Sheets.Count
Debug.Print Sheet2.Columns(1).Cells.Count |
Ponieważ to coś, z czym pewnie przyjdzie nam żyć, to może (upierając się przy nazwach kodowych) wdrożyć jakieś rozwiązania tego typu (chyba ciut nadmiernie zagmatwałem):
Kod: | Private Sub Workbook_Open()
Dim wks As Worksheet, sheet As Object
For Each wks In ThisWorkbook.Worksheets
Set sheet = ActiveWorkbook.VBProject.VBComponents(ActiveWorkbook.Sheets(wks.Name).CodeName)
sheet.Name = Replace(wks.CodeName, "Arkusz", "Sheet")
Next wks
End Sub | (trzeba zezwolić na dostęp programowy do projektu VBA). |
_________________ Kaper Jej Królewskiej Mości
Jeśli dane będą torturowane dość długo, przyznają się do wszystkiego |
|
 | ID posta:
417885
|
|
|
 |
|
|
Rafał B.
ExcelSpec


Wersja: Win Office 2016
Pomógł: 67 razy Posty: 421
|
Wysłany: 11-06-2022, 14:19
|
|
|
Mój test się powiódł i okazało się, że rację miał @Maciej Gonet co do zmian w samym pliku
1. wejście do pola `(name)` w Properties,
2. wykasowanie znaku `1` z `Arkusz1`
3. i ponowne wstawienie `1` (czyli de facto - brak zmiany tej nazwy)
powoduje modyfikację pliku.
W przypadku rozpakowania `.xlsb` zmianie ulega plik `xl\worksheets\sheet1.bin`***. Nie wiem jaki plik w przypadku `.xlsm`- nie testowałem.
Otwarte w Notepad++:
Kod: |
Przed testem
“É @ ˙˙˙˙˙˙˙˙ ”
Po teście
“%É @ ˙˙˙˙˙˙˙˙ A r k u s z 1 ” |
Wydaje się więc, że właściwość `(name)` może być albo zapisana, albo niezapisana. W przypadku braku zapisu jest automatycznie tłumaczona zgodnie z wersją office. A po zapisaniu jest niezmienna niezależnie od środowiska. Być może część IDE w określonych wersjach Excela np. zapisuje ją podczas kompilacji? Tego już nie wiem, do ewentualnych dalszych testów dla zainteresowanych. W każdym razie dobrze jest nadawać nazwy znaczące. Nawet z wyśmiewaną w nowoczesnych jezykach- ale jakże zakorzenioną u nas tzw. notacją węgierską w stylu `wsReport`, `wsPivot` etc.
***
Nazwa pliku jest jest niezależna od naszej nazwy arkuszowej lub kodowej |
_________________ Częstym błędem jest zakładanie, że autorzy niezrozumiałego kodu będą w jakiś sposób potrafili wyrazić się jasno i klarownie w komentarzach. Kevlin Henney |
|
 | ID posta:
417930
|
|
|
 |
|
|
Rafał B.
ExcelSpec


Wersja: Win Office 2016
Pomógł: 67 razy Posty: 421
|
Wysłany: 12-06-2022, 16:09
|
|
|
Napisałem króciutkie makro, które odpalone przed zapisem powinno rozwiązać sprawę (ale to do weryfikacji) jak ktoś ma duży projekt z nazwami Arkusz1, Arkusz 2 etc. i nie chce ryzykować zabaw z Find&Replace w projekcie.
Kod: | Private Sub SaveWorkbookCodenames()
Dim ws As Worksheet
For Each ws In ThisWorkbook.Sheets
ws.[_CodeName] = ws.CodeName
Next ws
End Sub
|
Dla mniej zaawansowanych w VBA ciekawostką może być użycie ukrytej właściwości [_CodeName], co sprawia, że zmiana nie wymaga włączonego dostępu dostępu do modelu obiektowego projektu VBA. |
_________________ Częstym błędem jest zakładanie, że autorzy niezrozumiałego kodu będą w jakiś sposób potrafili wyrazić się jasno i klarownie w komentarzach. Kevlin Henney |
|
 | ID posta:
417944
|
|
|
 |
|
|
marzatela
Excel Expert


Zaproszone osoby: 316
Pomogła: 469 razy Posty: 2653
|
Wysłany: 12-06-2022, 16:46
|
|
|
Muszę to sprawdzić. Ja próbowałam wcześniej zmieniać .CodeName makrem, ale odbiłam się o własciwość ReadOnly. |
_________________ marzatela
http://www.szultaset.pl |
|
 | ID posta:
417945
|
|
|
 |
|
|
|
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
|