Kopiowanie formuł, adresy względne

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
krzynio
Posty: 1
Rejestracja: pt lip 12, 2019 10:40 am

Kopiowanie formuł, adresy względne

Post autor: krzynio »

Witam!
Otóż mam problem z kopiowaniem formuł. Korzystając z poniższej procedury kopiuję formuły z wiersza TemlateRow to kolejnych wierszy Row
Problem w tym, że takie kopiowanie kopiuje adresy bezwzględne formuł, tzn. jeżeli w komórce w wierszu TemplateRow mam formułę =A1*B1 to to zostanie ona skopiowana dokładnie taka jaka jest, podczas gdy ja chciałbym, by formuła kopiowała się tak jak po przeciągnięciu komórki w dół, czyli aby w kolejnych kopiowanych wierszach, wiersze z formuły też były inkrementowane czyli =A2*B2, =A3*B3 itp. Jak to zapisać? Czy jest możliwe w VBA?

Kod: Zaznacz cały

	
for Row=StartRow to RowCount-2
	for Col=StartCol to ColCount
		sh1.getCellByPosition(Col, Row).Formula = sh1.GetCellByPosition(Col, TemplateRow).Formula
	Next Col
Next Row
LibreOffie 6.1, Debian Testing x64
belstar
Posty: 654
Rejestracja: czw mar 17, 2011 9:08 am

Re: Kopiowanie formuł, adresy względne

Post autor: belstar »

krzynio pisze: Czy jest możliwe w VBA?
Jest, choć nie tak prosto jak przy przeciąganiu.

Pętle już masz, dodaj licznik. wydobądź adresy ze zmiennych Col i Row, dodaj do adresów licznik i tak stworzysz nowy adres dla każdej iteracji pętli. Trochę programowania w basicu i to koniec.

Takiej prostej metody na wykonanie tego nie ma, lub o takiej nie słyszałem.

Edit: (sorry) Nie ze zmiennych Col i Row ale z:

Kod: Zaznacz cały

Twoja_zmienna_Adres = sh1.getCellByPosition(Col, Row).Formula
Bedzie to tekst (string), więc musisz korzystać z funkcji tekstowych basica, left, right, instr, mid itp.
LibreOffice 5.1.2.2 Ubuntu 16 LTS
ODPOWIEDZ