[SOLVED] Kopiowanie tylko wyfiltrowanych Wyników

Użytkowanie arkusza kalkulacyjnego
Awatar użytkownika
Jermor
Posty: 2361
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Kopiowanie tylko wyfiltrowanych Wyników

Post autor: Jermor »

Możesz nie podawać drugiego argumentu. Pojawią się tylko cyfry znaczące.

Kod: Zaznacz cały

wynik=oFA.callFunction( "dec2hex", array(liczba) )
AOO 4.1.15, LO 24.8.2 (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.
Altaro
Posty: 37
Rejestracja: czw paź 26, 2023 10:13 am

Re: Kopiowanie tylko wyfiltrowanych Wyników

Post autor: Altaro »

Zrobiłem to prościej, bez wskazywania długości hex-a

Kod: Zaznacz cały

Function Int2Hex(iLong As Long) as string
    Int2Hex = Hex( iLong )
End Function
i wywołanie

Kod: Zaznacz cały

komórka=Int2Hex(oTabela.getCellByPosition(2,2).string)
Win 10
LibreOffice 7.1.3.2 x64
Awatar użytkownika
Jermor
Posty: 2361
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Kopiowanie tylko wyfiltrowanych Wyników

Post autor: Jermor »

Zafiksowałem się na tym, że chcesz w Basicu wykorzystać funkcję Calca, więc w ogóle nie wziąłem pod uwagę, że w Basicu jest funkcja Hex.
AOO 4.1.15, LO 24.8.2 (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.
Altaro
Posty: 37
Rejestracja: czw paź 26, 2023 10:13 am

Re: Kopiowanie tylko wyfiltrowanych Wyników

Post autor: Altaro »

Najważniejsze że człowiek sobie poradził. Teraz zastanawiam się jak zagnieździć funkcję if w if.... jeśli chodzi o macro.

Potrzebuję wykonywać operację w pętli ponieważ w tabeli występują wiersze które nie są numerami i je należy usuwać., a w zależności od zmiennej ta funkcja, musi się minimalnie różnić od siebie.

próbuję w taki sposób ale nie działa:

Kod: Zaznacz cały

Sub Usun_wklejone_naglowki(z$,wiersze)
if z$ = "A" then
For i=0 to wiersze
if isNumeric(oRoboczy.getCellByPosition(0,i).string) = false then
oRoboczy.getRows.removeByIndex(i,1)
end if
Next
else
For i=0 to wiersze
if isNumeric(oOrange.getCellByPosition(0,i).string) = false then
oOrange.getRows.removeByIndex(i,1)
end if
next
End Sub
Niestety nie działa i już przyglądam się temu którąś minute i nic.
Win 10
LibreOffice 7.1.3.2 x64
Awatar użytkownika
Jermor
Posty: 2361
Rejestracja: sob paź 12, 2013 11:09 am
Kontakt:

Re: Kopiowanie tylko wyfiltrowanych Wyników

Post autor: Jermor »

Po pierwsze, nie powinieneś kontynuować tematu "Kopiowanie tylko wyfiltrowanych wyników" tylko założyć nowy temat. To o co pytasz teraz, dotyczy innego zakresu wiedzy i nie jest związane z filtrowaniem wyników.
Co do twojej procedury, to może najpierw napisz, co ci nie działa?
Z kodu, jaki zamieściłeś, wynika, że chcesz usuwać te wiersze (w obiekcie oRoboczy, gdy argument "z" ma wartość "A" lub wiersze w obiekcie oOrange, gdy ten argument jest różny od "A"), które w pierwszej kolumnie zawierają wpis inny niż liczba.
Ten kod można uprościć do takiej postaci:

Kod: Zaznacz cały

Sub Usun_wklejone_naglowki(z$,wiersze)
For i=0 to wiersze
	if z$ = "A" then
		if isNumeric(oRoboczy.getCellByPosition(0,i).string) = false then oRoboczy.getRows.removeByIndex(i,1)
	else
		if isNumeric(oOrange.getCellByPosition(0,i).string) = false then oOrange.getRows.removeByIndex(i,1)
	end if
next
End Sub
Jednak jego działanie nie będzie satysfakcjonujące. Argument "wiersze" w twojej funkcji podaje, do którego wiersza należy przeprowadzić tę operację. Zwróć uwagę na to, że usunięcie wiersza sprawi to, iż następny wiersz w obiekcie otrzyma numer tego usuniętego wiersza. Jednak instrukcja Next powiększy indeks "i" o jeden i w ten sposób ten wiersz nie będzie już podlegał sprawdzaniu.
Dlatego zaproponuję taką funkcję:

Kod: Zaznacz cały

Sub Usun_wklejone_naglowki(z$)
dim oArkusz as Object
If z="A" then oArkusz=oRoboczy else oArkusz=oOrange
i=0
Do while oArkusz.getCellByPosition(0,i).string <> ""
	if isNumeric(oArkusz.getCellByPosition(0,i).string) = false then oArkusz.getRows.removeByIndex(i,1) : i=i-1
	i=i+1
Loop
End Sub
Funkcja wykonuje sprawdzania danych w pierwszej kolumnie wymaganego arkusza do osiągnięcia pustej komórki w wierszu.
AOO 4.1.15, LO 24.8.2 (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.
Altaro
Posty: 37
Rejestracja: czw paź 26, 2023 10:13 am

Re: Kopiowanie tylko wyfiltrowanych Wyników

Post autor: Altaro »

Dziękuję. Wszystko działa. Na kolejne tematy, zakładam oddzielne wątki.
Win 10
LibreOffice 7.1.3.2 x64
ODPOWIEDZ