Strona 1 z 1
[Solved]tworzenie nowej karty i wpisanie jej nazwy do arkusz
: ndz sty 24, 2016 9:29 pm
autor: kturendyk
Witam ponownie
Ciąg dalszy mojej walki z arkuszami.
Prosił bym o pomoc bo walczę już kilka dni a efektów brak, dopiero się uczę pisać makra.
Chciałbym aby makro tworzyło nowy arkusz na końcu (z przycisku który będzie na wszystkich kartach już utworzonych) o nazwie "arkusz N" gdzie N będzie numerem kolejnym.
Dodatkowo po utworzeniu ma wpisać nazwę arkusza na koniec listy tworzonej w pierwszym arkuszu( w moim przypadku "główna").
Proszę o wyrozumiałość, człowiek się całe życie uczy a ja już oczopląsu dostaje od czytania a nic mi z tego na razie nie wychodzi.
Re: tworzenie nowej karty i wpisanie jej nazwy do arkusza
: ndz sty 24, 2016 10:11 pm
autor: belstar
Dziś nie specjalnie mam czas żeby ci pomóc, może jutro (dotyczy to też twojego poprzedniego postu), a w tej chwili polecam lekturę
https://wiki.openoffice.org/wiki/Docume ... readsheets.
Wstawienie arkusza:
Kod: Zaznacz cały
Sub WstawArkusz
Dim Doc As Object
Dim Sheet As Object
Doc = ThisComponent
If Doc.Sheets.hasByName("MySheet") Then
Sheet = Doc.Sheets.getByName("MySheet")
Else
Sheet = Doc.createInstance("com.sun.star.sheet.Spreadsheet")
Doc.Sheets.insertByName("MySheet", Sheet)
End If
End Sub
Mała porada:
Nie rejestruj procedur i nie ucz się na podstawie wygenerowanego kodu, bo ci tylko namiesza w głowie.
Re: tworzenie nowej karty i wpisanie jej nazwy do arkusza
: ndz sty 24, 2016 10:41 pm
autor: kturendyk
Dziękuję za zainteresowanie.
Z moim angielskim trochę ciężko ale sobie radzę plus translator.
Faktycznie próbowałem rejestrować i coś z tego poskładać ale wychodzi z tego lipa.
Jestem cierpliwy i poczekam - jakby dało radę z moimi problemami było by super to by mi przyspieszyło moje prace.
Jeszcze raz z góry dziękuję
(edit)
Moje wypociny prawie działają pozbierałem kilka makr i je trochę pomieszałem.
Jeszcze nie wiem jak w takiej formie zrobić żeby nazwa arkusza w zakładkach miała nazwę np:"arkusz"
Jeżeli można i ktoś by miał czas to prosiłbym o poprawki tych moich wypocin bo troszkę tam namieszałem.
Jak zrobić żeby liczba w kolumnie K się zwiększała po dodaniu arkusza a nie przed.
Dziękuję za cierpliwość i pozdrawiam
Re: tworzenie nowej karty i wpisanie jej nazwy do arkusza
: wt lut 02, 2016 5:40 pm
autor: kturendyk
Odświeżam
Re:[Solved] tworzenie nowej karty i wpisanie jej nazwy do ar
: ndz lut 14, 2016 11:42 pm
autor: kturendyk
Przekazuje moje wypociny dla potomnych, jakoś dałem radę chociaż trochę mi z tym zeszło.
Pozdrawiam czytających.
Re: [Solved]tworzenie nowej karty i wpisanie jej nazwy do ar
: pn lut 15, 2016 12:58 pm
autor: Jan_J
Struktura skoroszytu posiada wbudowaną zmienną Count przechowującą liczbę arkuszy.
Możesz ją wykorzystać do nazwy zamiast komórki K1
Kod: Zaznacz cały
sub wstawArkuszNaKoniecSkoroszytu()
doc = thisComponent
arkusze = doc.Sheets
nark = arkusze.Count
nazwa = "Arkusz" & (nark+1)
arkusze.InsertNewByName(nazwa, nark)
bazowy = "spis"
arkusze.getByName(bazowy).getCellByPosition(0, nark).setString(nazwa)
end sub
Nie ucz się z nagranych makr; raczej studiuj przykłady API, np. z materiałów Andrew Pitonyaka.
Trochę odwróciłem logikę. Wszystko co ważne dzieje się wewnątrz procedury, w arkuszu lądują jedynie wyniki. Użyłem getByName(bazowy) zamiast getByIndex(0) dlatego, że kolejność zależy od przeciągania zakładek przez użytkownika. Co prawda nazwę też łatwo zmienić...
Re: [Solved]tworzenie nowej karty i wpisanie jej nazwy do ar
: pn lut 15, 2016 4:48 pm
autor: belstar
Z tym co napisał Jan i z tym wstawionym przez mnie możesz stworzyć całkiem profesjonalne makra:
Kod: Zaznacz cały
Sub ZnajdzPierwszaPusta
Zeszyt = ThisComponent.Sheets.getByName("arkusz1")
Komorki = Zeszyt.getCellRangeByName("L12:L300")
Puste_w_kol_L = Komorki.queryEmptyCells()
Pierwsza_Pusta = Puste_w_kol_L.getByIndex(0)
PustyZakres = Pierwsza_Pusta.RangeAddress
Print "L" & PustyZakres.StartRow
End Sub
Sub Sort
Dim oSheet
Dim oRange
Dim oSortFields(0) as new com.sun.star.util.SortField
Dim oSortDesc(1) as new com.sun.star.beans.PropertyValue
oSheet = ThisComponent.Sheets(0)
oRange = oSheet.getCellRangeByName("J12:L22")
oSortFields(0).Field = 0'wedłog jakiej kolumny
oSortFields(0).SortAscending = true'rosnąco czy malejąco
oSortFields(0).FieldType = com.sun.star.util.SortFieldType.ALPHANUMERIC
oSortDesc(0).Name = "SortFields"
oSortDesc(0).Value = oSortFields()
oSortDesc(1).Name = "ContainsHeader"'czy ma nagłówek
oSortDesc(1).Value = False
oRange.Sort(oSortDesc())
End Sub
Będzie to szybsze, bardziej czytelne i zgodne ze standardem.
Re: [Solved]tworzenie nowej karty i wpisanie jej nazwy do ar
: pn lut 15, 2016 10:42 pm
autor: kturendyk
Witam,
Dopasowałem to do swojego arkusza i działa.Jednak można to inaczej zrobić, sam bym sobie nie poradził jeszcze wiele nauki przedemną.
Wielkie podziękowania dla Jan_J i belstar.
Poprawiony arkusz wstawiam dla potomnych niech też się czegoś nauczą.
Re: [Solved]tworzenie nowej karty i wpisanie jej nazwy do ar
: pn lut 15, 2016 11:06 pm
autor: Jan_J
W moim kawałku są jeszcze braki: brak zabezpieczenia przypadku, kiedy arkusz o zaproponowanej nazwie już istnieje oraz przypadku, kiedy arkusz ze spisem ma inną nazwę (ściślej: nie istnieje arkusz o nazwie pamiętanej w bazowy). Te okoliczności nie wystąpią, o ile plansze będą tworzone jedynie makrem i nie będą zarządzane w inny sposób, ale nie da się wykluczyć innych ingerencji, a te mogą spowodować błąd.