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: 72916 Skopiuj do schowka 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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 :mrgreen: , 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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 :boss

Jeśli dane będą torturowane dość długo, przyznają się do wszystkiego
ID posta: 417885 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 Skopiuj do schowka
 
 
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 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