Makro wpisujące formułę do odpowiedniej komórki.
Makro wpisujące formułę do odpowiedniej komórki.
Witam Serdecznie
Z góry chciałbym podziękować wszystkim za pomoc.
Chciałbym się dowiedzieć jak wprowadzić formułę =ZŁĄCZ.TEKSTY(A2;"-";I2;"-";D2;"-";B2;"-" ;H2) do podanego przeze mnie poniżej makro. Chciałbym aby wartości pobierane były z Arkusz1, a wynik wprowadzany był w arkuszu gotowy_doc w komórce od K2. Na chwilę obecną poniższe makro podpięte mam pod przycisk i po kliknięciu dane wprowadzane są w kolejne wiersze od A:J.
Sub Nowe_Makro_kopiujace_dane
Dim oSheets : oSheets = ThisComponent.Sheets
Dim oSheet1 : oSheet1 = oSheets.getByName("Arkusz1")
Dim oSheet2 : oSheet2 = oSheets.getByName("gotowy_doc")
Dim oSheet3 : oSheet3 = oSheets.getByName("skopiowana_baza")
Dim oCell
Dim s As String
Dim jot As Long
Dim i As Long
oCell = oSheet3.getCellByPosition(3,2)
i = oCell.getString
for jot=0 to 9
oCell = oSheet1.getCellByPosition(jot,1)
s = oCell.getString
oCell = oSheet2.getCellByPosition(jot,1+i)
oCell.setString(s)
Next jot
i = i+1
oCell = oSheet3.getCellByPosition(3,2)
oCell.setString(i)
End Sub
Prosiłbym o pomoc i radę.
Pozdrawiam
Z góry chciałbym podziękować wszystkim za pomoc.
Chciałbym się dowiedzieć jak wprowadzić formułę =ZŁĄCZ.TEKSTY(A2;"-";I2;"-";D2;"-";B2;"-" ;H2) do podanego przeze mnie poniżej makro. Chciałbym aby wartości pobierane były z Arkusz1, a wynik wprowadzany był w arkuszu gotowy_doc w komórce od K2. Na chwilę obecną poniższe makro podpięte mam pod przycisk i po kliknięciu dane wprowadzane są w kolejne wiersze od A:J.
Sub Nowe_Makro_kopiujace_dane
Dim oSheets : oSheets = ThisComponent.Sheets
Dim oSheet1 : oSheet1 = oSheets.getByName("Arkusz1")
Dim oSheet2 : oSheet2 = oSheets.getByName("gotowy_doc")
Dim oSheet3 : oSheet3 = oSheets.getByName("skopiowana_baza")
Dim oCell
Dim s As String
Dim jot As Long
Dim i As Long
oCell = oSheet3.getCellByPosition(3,2)
i = oCell.getString
for jot=0 to 9
oCell = oSheet1.getCellByPosition(jot,1)
s = oCell.getString
oCell = oSheet2.getCellByPosition(jot,1+i)
oCell.setString(s)
Next jot
i = i+1
oCell = oSheet3.getCellByPosition(3,2)
oCell.setString(i)
End Sub
Prosiłbym o pomoc i radę.
Pozdrawiam
OpenOffice 4.1.3 // Windows 7
Re: Makro wpisujące formułę do odpowiedniej komórki.
Aby wstawić formulę używasz konstrukcji:
myślę, że należałoby zastosować angielską nazwę funkcji ZŁĄCZ.TEKSTY czyli CONCATENATE
Kod: Zaznacz cały
oCell.setFormula("=FUNCTION()")
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.
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.
Re: Makro wpisujące formułę do odpowiedniej komórki.
Moim zdaniem chodzi o to, by makro przygotowywało wynik, zamiast żeby robiła to formuła. No bo pisanie formuły makrem to metaprogramowanie, program generujący program. Mimi że czasem się przydaje, to jednak rzadziej, niż użycie makr do przetwarzania zawartości.Chciałbym się dowiedzieć jak wprowadzić formułę =ZŁĄCZ.TEKSTY(A2;"-";I2;"-";D2;"-";B2;"-" ;H2) do podanego przeze mnie poniżej makro. Chciałbym aby wartości pobierane były z Arkusz1, a wynik wprowadzany był w arkuszu gotowy_doc w komórce od K2.
Do łączenia tekstów służy w Basicu operator &. Wobec tego instrukcja postaci
cell0.setString(cell1.getString() & "-" & cell2.getString() & "-" & cell3.getString())
powinna dać radę, po odpowiednim ustawieniu zmiennych cell0, cell1, itd. Albo bez pamiętania zmiennych, tylko poprzez odwołania do odpowiednich obiektów, np. metodą getCellByPosition.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
Re: Makro wpisujące formułę do odpowiedniej komórki.
Dziękuję za odpowiedź. Na pewno sprawdzę podesłane rozwiązanie i dam znać czy wszystko działa.
OpenOffice 4.1.3 // Windows 7
Re: Makro wpisujące formułę do odpowiedniej komórki.
Jeżeli to co wywnioskował Jermor z twojego pytania jest właściwe, to jego podpowiedź jest jak najbardziej prawidłowa. Musisz użyć angielskiej nazwy funkcji.
Można też użyć polskiego odpowiednika z tym że w tym przypadku musisz użyć właściwości
Polecam jednak trzymać się standardu i użyć angielskiego odpowiednika.
Musisz też pamiętać o właściwym sformułowaniu ciągu reprezentującym tą formułę z uwagi na cudzysłowy, ponieważ w basicu te znaki reprezentują początek i koniec stringu. Więc konstrukcja:
po prostu nie zadziała i basić zgłosi błąd. Trzeba wykorzystać dodatkowe znaki cudzysłowów otaczając te które mają być w formule a poszczególne części formuły łączyć znakami konkatenacji o których wspomniał JanJ.
Można też użyć polskiego odpowiednika z tym że w tym przypadku musisz użyć właściwości
Kod: Zaznacz cały
oCell.FormulaLocal "=FUNCTION()"
Musisz też pamiętać o właściwym sformułowaniu ciągu reprezentującym tą formułę z uwagi na cudzysłowy, ponieważ w basicu te znaki reprezentują początek i koniec stringu. Więc konstrukcja:
Kod: Zaznacz cały
oCell.FormulaLocal = "ZŁĄCZ.TEKSTY(A2;"-";I2;"-";D2;"-";B2;"-" ;H2)"
LibreOffice 5.1.2.2 Ubuntu 16 LTS
Re: Makro wpisujące formułę do odpowiedniej komórki.
Super. Dziękuję za wyjaśnienie bardzo mi to pomogło.
OpenOffice 4.1.3 // Windows 7
Re: Makro wpisujące formułę do odpowiedniej komórki.
Mam jeszcze jedno pytanie dotyczące poniższej części kodu (na chwile obecną nie działa ale może przekaże moją myśl):
oCell = oSheet2.getCellByPosition(11,1+i)
oCell.setFormula "=CONVERTSTRINGTOCODE128(10,1+i)"
czyli w komórce (11,1+1) chciałbym wprowadzać wynik funkcji =CONVERTSTRINGTOCODE128(10,1+i) , która by się odwoływała do komórek (10,i+1) i kolejnych
oCell = oSheet2.getCellByPosition(11,1+i)
oCell.setFormula "=CONVERTSTRINGTOCODE128(10,1+i)"
czyli w komórce (11,1+1) chciałbym wprowadzać wynik funkcji =CONVERTSTRINGTOCODE128(10,1+i) , która by się odwoływała do komórek (10,i+1) i kolejnych
OpenOffice 4.1.3 // Windows 7
Re: Makro wpisujące formułę do odpowiedniej komórki.
Już wszystko działa prawidłowa formuła wygląda tak :
oCell = oSheet2.getCellByPosition(11,i)
oCell.setFormula "=CONVERTSTRINGTOCODE128(K"+i+")"
Mam tylko ostatnie pytanie jak sprawdzić aby formuła wpisywana była z dużych liter bo na chwile obecna wpisuje z małych.
oCell = oSheet2.getCellByPosition(11,i)
oCell.setFormula "=CONVERTSTRINGTOCODE128(K"+i+")"
Mam tylko ostatnie pytanie jak sprawdzić aby formuła wpisywana była z dużych liter bo na chwile obecna wpisuje z małych.
OpenOffice 4.1.3 // Windows 7
Re: Makro wpisujące formułę do odpowiedniej komórki.
Ok ten problem tez udało mi eis rozwiązać, pod spodem podsyłam rozwiązanie może komuś się przyda.
duze_liczby = "=CONVERTSTRINGTOCODE128(K"+i+")"
oSheet2.getCellByposition(11,i-1).Formulalocal = duze_liczby
Dziękuję wszystkim za pomoc i za cenne rady. Pozdrawiam
duze_liczby = "=CONVERTSTRINGTOCODE128(K"+i+")"
oSheet2.getCellByposition(11,i-1).Formulalocal = duze_liczby
Dziękuję wszystkim za pomoc i za cenne rady. Pozdrawiam
OpenOffice 4.1.3 // Windows 7
Re: Makro wpisujące formułę do odpowiedniej komórki.
Użycie "oCell.FormulaLocal =...", o jakiej napisał @belstar, może być o tyle ryzykowne, że uruchomienie arkusza w innej lokalizacji językowej może skończyć się niepowodzeniem. W tej odmiennej lokalizacji składnia funkcji nie zostanie rozpoznana.
Dla tych, którzy nie wiedzą. Arkusz kalkulacyjny będzie realizowany w każdej lokalizacji, gdyż wbudowane funkcje obliczeniowe w nim zastosowane są "pamiętane" w postaci kodu funkcji a nie ich stosowanych nazw. Dlatego arkusz przygotowany w np. Niemczech, gdzie użyto niemieckich nazw funkcji, będzie funkcjonował w Polsce i pokazywał nazwy polskie.
Inaczej jest w przypadku wstawiania ciągu z nazwą funkcji. Ten ciąg nie zmieni się na inny tylko dlatego, że zmieniono lokalizację. Będzie zawsze taki sam i po wpisaniu do komórki może wygenerować błąd #NAZWA? sygnalizując, że nazwa funkcji nie została rozpoznana.
Przytoczona w poście funkcja CONVERTSTRINGTOCODE128 nie należy do funkcji wbudowanych, czyli tych włączonych do aplikacji w czasie jej instalacji. Jest to funkcja "zewnętrzna" napisana przez kogoś i udostępniona płatnie lub bezpłatnie do wykorzystania we własnych rozwiązaniach (zobacz np. http://freebarcodefonts.dobsonsw.com). Funkcja ta nie ma zatem swojej "lokalnej" nazwy. W tym sensie stosowanie "FormulaLocal" nie różni się niczym od "Formula".
W przypadku tego przykładu, gdyby arkusz miał zostać przeniesiony na inny komputer, należałoby zapewnić dostępność tej funkcji w nowym środowisku.
Dla tych, którzy nie wiedzą. Arkusz kalkulacyjny będzie realizowany w każdej lokalizacji, gdyż wbudowane funkcje obliczeniowe w nim zastosowane są "pamiętane" w postaci kodu funkcji a nie ich stosowanych nazw. Dlatego arkusz przygotowany w np. Niemczech, gdzie użyto niemieckich nazw funkcji, będzie funkcjonował w Polsce i pokazywał nazwy polskie.
Inaczej jest w przypadku wstawiania ciągu z nazwą funkcji. Ten ciąg nie zmieni się na inny tylko dlatego, że zmieniono lokalizację. Będzie zawsze taki sam i po wpisaniu do komórki może wygenerować błąd #NAZWA? sygnalizując, że nazwa funkcji nie została rozpoznana.
Przytoczona w poście funkcja CONVERTSTRINGTOCODE128 nie należy do funkcji wbudowanych, czyli tych włączonych do aplikacji w czasie jej instalacji. Jest to funkcja "zewnętrzna" napisana przez kogoś i udostępniona płatnie lub bezpłatnie do wykorzystania we własnych rozwiązaniach (zobacz np. http://freebarcodefonts.dobsonsw.com). Funkcja ta nie ma zatem swojej "lokalnej" nazwy. W tym sensie stosowanie "FormulaLocal" nie różni się niczym od "Formula".
W przypadku tego przykładu, gdyby arkusz miał zostać przeniesiony na inny komputer, należałoby zapewnić dostępność tej funkcji w nowym środowisku.
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.
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.
Re: Makro wpisujące formułę do odpowiedniej komórki.
Dziękuję za wyjaśnienie. Będę o tym pamiętał.
OpenOffice 4.1.3 // Windows 7