[SOLVED] zapętlenie błędu Basic'a

Dyskusje dotyczące tworzenia makropoleceń, pisania skryptów oraz programowania przy użyciu UNO
szwed
Posty: 2
Rejestracja: czw sty 15, 2015 2:02 pm

[SOLVED] zapętlenie błędu Basic'a

Post autor: szwed »

Witam,
jako nawet nie raczkujący użytkownik OO co chwila obijam się o jakieś problemy, jednak z poniższym chciałbym prosić o pomoc.

Generalnie pracuję nad arkuszem rozliczeń handlowców. W module określającym przynależność klienta do obsługującej go osoby mam następującą funkcję:

Kod: Zaznacz cały

function przypisz_leszek (podmiot$) as string 
'oDokC = ThisComponent
'oArkusz = oDokC.Sheets.getByIndex(1)
'dim i as integer
'dim imax as integer
'imax = 618
'przypisz_leszek="-"
'for i = 1 to imax
'	grupa$=oArkusz.getCellByposition(5,i).string
'	zawartosc$ = oArkusz.getCellByPosition(0,i).string
'	if podmiot$ = zawartosc$ and grupa$="Nicro" then
' 		przypisz_leszek = "Nicro" 
'	end if
'next i

End function
przy wklejaniu jej w arkusz/komórki spokojnie zadziałała zgodnie z intencjami, jednak przy ponownym otwieraniu arkusza wyrzuca mi następujący komunikat:

http://i57.tinypic.com/1q1t88.jpg

w dodatku zamierza go wyrzucać ca. 5000 razy , bo tyle podmiotów jest sprawdzanych (więc klikanie w komunikat nie wchodzi w rachubę)
jak na razie po zremowaniu funkcji mogę arkusz otworzyć , ale wyniki działania znikają....

Prosiłbym o dwie porady:
- wytknięcie błędu w funkcji
- jak uniknąć przetwarzania funkcji przy każdym otworzeniu arkusza - już przy pierwszym jej użyciu musiałem to robić na raty, gdyż zastosowanie do całej listy zawieszało komputer
Ostatnio zmieniony pt sty 30, 2015 1:33 pm przez szwed, łącznie zmieniany 1 raz.
Apache OpenOffice 4.1.1 Windows 7 Pro SP1
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: zapętlenie błędu Basic'a

Post autor: Jan_J »

Kod

Kod: Zaznacz cały

oDokC = ThisComponent
oArkusz = oDokC.Sheets.getByIndex(1)
pobiera uchwyt drugiego arkusza w bieżącym dokumencie. Żeby się to udało, musi istnieć bieżący dokument, i musi on mieć właściwość Sheets.
Nie wiem, w jaki sposób odpalasz tę funkcję; sądzę, że na starcie pakietu, kiedy domyślnego dokumentu albo nie ma, albo nie jest on skoroszytem.
Wyjścia są następujące:
* lepsze: wywoływać funkcję przy otwarciu konkretnego dokumentu. To znaczy, musi on mieć przypisaną procedurę obsługi. To się da zrobić przez Narzędzia/Dostosuj/Zdarzenia, bez dodatkowego narzutu programowania;
* niepełne (albo uzupełniające): zanim się dobierzemy do Sheets, sprawdźmy, czy jest to możliwe. Istnieją funkcje biblioteczne przeznaczone do introspekcji, przede wszystkim hasUnoInterfaces(obiekt, właściwość) oraz obiekt.supportsService(właściwość), np.

Kod: Zaznacz cały

d = thisComponent
r = d.supportsService("com.sun.star.sheet.SpreadsheetDocument")
Trochę o tym pisze Andrew Pitonyak w OO Macros Explained w rozsziale 13.2.
* można też krytyczne operacje wykonywać z udziałem lokalnej obsługi błędów. Nie lubię tego robić w Basicu, co nie znaczy, że się nie da.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
szwed
Posty: 2
Rejestracja: czw sty 15, 2015 2:02 pm

Re: zapętlenie błędu Basic'a

Post autor: szwed »

Dziękuję za pomoc,
moim błędem było, jak sądzę, nierozróżnianie funkcji calc'a i basic'a. Problematyczną własną funkcję zamieściłem w komórkach licząc, że zadziała jak standardowa. Po schowaniu jej do macra działa bez zarzutu. W formie jakiej to było *lepsze rozwiązanie niestety nie pomogło (choć, przyznaję sie, nie sprawdziłem wszystkich opcji).

Jak na razie można powiedzieć, że [SOLVED]
Pozdrowienia


EDYTKA:
czy jest jakiś prosty trik obchodzący/przerywający raportowanie błędów basic'a - w moim przypadku , przy dużej ilości powtórzeń odwołań (w arkuszu) do źle dobranej funkcji miałem do wyboru albo przerywać działanie OO (traci się niezapisane dane, zamyka wszystkie dokumenty etc.etc, czyli niezaciekawie) albo klikać OK w raporcie (x 5000, można ale palce bolą ;-))
Apache OpenOffice 4.1.1 Windows 7 Pro SP1
Jan_J
Posty: 4558
Rejestracja: pt maja 22, 2009 1:20 pm
Lokalizacja: Wrocław

Re: [SOLVED] zapętlenie błędu Basic'a

Post autor: Jan_J »

lepsze
sądziłem, że problem dotyczy odpalania makra przy ładowaniu dowolnego dokumentu (także dokumentu nie właściwego typu). Skoro przyczyna była inna, lepsze mogło się okazać błędną diagnozą.
JJ
LO (7.6|24.2) ∙ Python (3.12|3.10) ∙ Unicode 15 ∙ LᴬTEX 2ε ∙ XML ∙ Unix tools ∙ Linux (Rocky|CentOS)
ODPOWIEDZ