Odwołanie automatyczne do wszystkich arkuszy w pliku

Użytkowanie arkusza kalkulacyjnego
kbrokos
Posty: 1
Rejestracja: wt sty 02, 2024 6:44 pm

Odwołanie automatyczne do wszystkich arkuszy w pliku

Post autor: kbrokos »

Witam.
Mam plik arkusza kalkulacyjnego w którym jest wiele arkuszy. Arkusz służy do podsumowania roku dla pracowników. Każdy arkusz w pliku jest dla danego pracownika. W trakcie roku dodaję dodatkowe arkusze dla nowych pracowników.
Na końcu za arkuszami pracowników mam arkusze podsumowania miesięczne od Stycznia do Grudnia oraz na końcu roczne.
Nazwy poszczególnych arkuszy są w formie NAZWISKO_IMIE.
Nie mogę zmienić nazw na Arkusz1 Arkusz2 Arkusz3 itd bo nie będę wiedział zanim otworzę arkusz kogo on dotyczy.
Do rzeczy:
Chcę w ostatnich arkuszach podsumowujących miesiące i rok aby dane pobierały się tam z wszystkich arkuszy pracowników.
Znalazłem na tym forum funkcję która wyrzuca mi listę wszystkich arkuszy w danym pliku.
Funkcja

Kod: Zaznacz cały

Function NazwyArkuszyBiezacySkoroszyt() As Array
    NazwyArkuszyBiezacySkoroszyt = NazwyArkuszy(ThisComponent)
End Function

Function NazwyArkuszy(d As Object) As Array
	s = d.Sheets
	Dim nazwy(0 To s.Count-1, 0 To 0)
	For i = 0 To s.Count-1
		nazwy(i, 0) = s.GetByIndex(i).Name
	Next i
	NazwyArkuszy = nazwy
End Function
oraz

Kod: Zaznacz cały

function ark_nazwa(numer as integer)
on error goto koniec
ark_nazwa = thisComponent.Sheets.getByIndex(numer).name
exit function
koniec:
ark_nazwa="Nie ma takiego arkusza"
end function
Działają i listują mi nazwy arkuszy. Jednak dalej nie umiem skorzystać z tych nazw i stworzyć odnośników do poszczególnych komórek z wszystkich arkuszy...
Czyli dla jasności w kolumnie A w wierszach od 2 do powiedzmy 50 mam wpisane cyfry od 0 do 49 oraz za pomocą Funkcji =ARK_NAZWA(A2) w polu B2 wyrzuca mi nazwę Arkusza w formie KOWALSKI_JAN. W kolejnej kolumnie chciałbym aby pobrały mi się wszystkie dane z pola np. B2 z każdego arkusza z tego pliku...
Jednak odwołanie "=$B2.B2" nie działa...
Próbowałem wersji "=$'B2'.B2" oraz "=$"B2".B2"... też nie działa...
Szukam w google rozwiązania ale nie umiem znaleźć tego czego potrzebuję...
Ostatnio zmieniony śr sty 03, 2024 12:02 am przez Jan_J, łącznie zmieniany 1 raz.
Powód: usnięta ikona [alert] z tytułu postu
LibreOffice 7.3.2.2 na Windows 11
Jan_J
Posty: 4560
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: Odwołanie automatyczne do wszystkich arkuszy w pliku

Post autor: Jan_J »

Problem wynika z nierozróżniania elementów gramatycznych w formułach. Mylisz adresy z danymi tekstowymi.

Formuła =ARK_NAZWA(numer) wpisuje ci do komórki TEKST z NAZWĄ ARKUSZA.
Dla użycia tej nazwy w adresie użyj funkcji ADR.POŚR(tekst_adresu)

Przykład: w A3 wartość 13
w B3 formuła =ARK_NAZWA(A3) daje wartość Kowalski_Jan
w D3 formuła =ADR.POŚR("$" & B3 & ".A1") daje wartość komórki A1 z arkusza Kowalski_Jan
Równie dobrze można ostatni etap rozbić na dwa osobne etapy:
w C3 formuła ="$" & B3 & ".A1" daje TEKST wyglądający jak adres komórki A1 z arkusza Kowalski_Jan
w D3 formuła =ADR.POŚR(C3) pobierze daną z tej komórki

Symbol $ nie jest konieczny, w tym przypadku nie ma wpływu na wynik.
Symbole ' otaczające nazwę arkusza, w tym przypadku także nie są potrzebne.
Symbole " otaczają stałe tekstowe. Muszą zostać.


PS. niedawno rozpoczęty wątek viewtopic.php?t=5967 dotyczy tego samego problemu.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Awatar użytkownika
Jermor
Posty: 2259
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Odwołanie automatyczne do wszystkich arkuszy w pliku

Post autor: Jermor »

Wydaje mi się, że cała ta kombinacja nie jest potrzebna. Jeśli masz ileś dedykowanych arkuszy, od "Arkusz_pierwszy" do "Arkusz_ostatni", to w arkuszu "podliczeniowym" sumę z np. komórek B2 tych arkuszy otrzymasz formułą =SUMA(Arkusz_pierwszy.B2:Arkusz_ostatni.B2).
Jeżeli wstawisz dowolne arkusze między _pierwszy a _ostatni, formuła uwzgledni to.
AOO 4.1.15, LO 7.5.9 (x64) na Windows 10 64bit
Ważne!
Jeśli twój problem został rozwiązany, wróć do swojego pierwszego postu, przejdź do edycji i dopisz [SOLVED] w temacie.
Inni, którzy mają podobny problem, będą wiedzieli, że istnieje jego rozwiązanie.
ODPOWIEDZ