Fórum pro uživatele kancelářského balíku OpenOffice | LibreOffice
 

#1 18. 12. 2021 14:51:07

Bezda86
Člen
Registrace: 18. 12. 2021
Příspěvků: 9

Chyba v typu proměnné v makru - VYŘEŠENO

Vyskakujemi hláška BASIC - Chyba při běhu '380' Nesprávná hodnota vlastnosti se zastavením v řádku:

NoveMnozstvi_data(0,0) = AktualniMnozstvi + PocetPrijem_data(0,0)

Může mi někdo říci jak upravit kód, aby byl funkční, zkoušel jsem různé kombinace proměnných a buď se mi nevepsal "počet" do buňky na listu příjmu ani nedošlo k přepočtu množství nebo nastala výše zmíněná chyba.

Option VBASupport 1
Private Sub ZapisPrijem_Click()
doc = thisComponent
ListPrijemMaterialu = doc.sheets(2)
ListSeznamMaterialu = doc.sheets(0)

'Zjištění posledního vyplněného řádku a volného řádku na listu "Příjem materiálu"
Dim PosledniRadekPrijem As Long, VolnyRadekPrijem As Integer

If WorksheetFunction.CountA(Cells) > 0 Then     
    PosledniRadekPrijem = Cells.Find(What:="*", After:=[A1], SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
     VolnyRadekPrijem = PosledniRadekPrijem + 1
End If

'Zápis počtu příjmu z příjmového formuláře
Dim PocetPrijem_range as object, PocetPrijem_data(0,0) as variant
PocetPrijem = ListPrijemMaterialu.getCellRangeByName("C3").string      
PocetPrijem_data(0,0) = PocetPrijem

BunkaPocetPrijem = "C" &VolnyRadekPrijem

PocetPrijem_range = ListPrijemMaterialu.getCellRangebyName(BunkaPocetPrijem)
PocetPrijem_range.setDataArray(PocetPrijem_data)


'Hledání řádku přijímaného materiálu na listu "Seznam materiálu"
Hledej = ListSeznamMaterialu.createSearchDescriptor()
Hledej.SearchString = NazevPrijem
Radek = ListSeznamMaterialu.findFirst(Hledej)
CisloRadku = Radek.RangeAddress.EndRow + 1
BunkaPocetPrepis = "F" &CisloRadku


'Načtení hodnoty počtu z listu "Seznam materiálu", navýšení o příjem a zapsání navýšené hodnoty
Dim NoveMnozstvi_range as object, NoveMnozstvi_data(0,0) as variant, AktualniMnozstvi as variant
AktualniMnozstvi = ListSeznamMaterialu.getCellRangeByName(BunkaPocetPrepis)
NoveMnozstvi_data(0,0) = AktualniMnozstvi + PocetPrijem_data(0,0)
NoveMnozstvi_range = ListSeznamMaterialu.getCellRangebyName(BunkaPocetPrepis)
NoveMnozstvi_range.setDataArray(NoveMnozstvi_data)

End Sub

Díky za jakékoliv rady

Editoval Bezda86 (29. 12. 2021 14:52:26)

Offline

#2 18. 12. 2021 18:47:13

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Chyba v typu proměnné v makru - VYŘEŠENO

Zde to vypadá že vám na předchozím řádku chybí přidat .string -> aby to do proměnné AktualniMnozstvi vložilo hodnotu z buňky a nikoliv buňku jako objekt .getCellRangeByName.

AktualniMnozstvi = ListSeznamMaterialu.getCellRangeByName(BunkaPocetPrepis).string

Jinak majkrosoftí VBA neumím a nejedná-li se o nativní LibreBasic tak to většinou ani nezkoumám neb s tím fakt nemám dobré zkušenosti a dělá to bordel - a i váš příklad mi to potvrdil -> hned po zkopírování do Libre Basic modulu to vypsalo chybu u asi třetí předtím funkční procedury pod vaší procedurou, že prý tam někde chybí znak '=' a musel jsem zbylé procedury zakomentovat aby se to obešlo bez nesmyslného chybového hlášení. Nicméně přes podmínku: 'If WorksheetFunction.CountA(Cells) > 0 Then' jsem se stejně při krokování nedostal a tak jsem holt musel zkoumat jen očima :-). Nicméně chybu by vám mělo pomoci odhalit kdybyste to krokoval a proměnné sledoval v Kukátku co se do nich uložilo, případně přes Xray či MRI.

Editoval kamlan (18. 12. 2021 18:49:42)

Offline

#3 18. 12. 2021 20:15:34

Bezda86
Člen
Registrace: 18. 12. 2021
Příspěvků: 9

Re: Chyba v typu proměnné v makru - VYŘEŠENO

To kamlan:
Uznávám, že kombinace kódu VBA z Excelu a z OO Calcu není ideální, ale zrovna v těchto řádkách mi to dává přesně ty hodnoty co potřebuji.
Řádek který zmiňuješ po přidání .string sice funguje, ale vzhledem k tomu že z dané buňky čtu číslo, ke kterému chci přičíst číslo a zapsat jejich součet zpět do této buňky, .string mi nepomáhá.
Když místo .string zadám .integer, tak zase vyskočí chyba zmiňující právě .integer

Offline

#4 18. 12. 2021 21:01:41

kamlan
Člen
Registrace: 15. 9. 2016
Příspěvků: 368

Re: Chyba v typu proměnné v makru - VYŘEŠENO

Myslím že si ne úplně rozumíme. Když do toho řádku přidáte .string, tak vám to vrátí hodnotu z buňky jako řetězec. Bez toho .string to do té proměnné AktualniMnozstvi uloží objekt buňky. Zapsáním .integer si nepomůžete, neboť tuhle vlastnost ten objekt buňky nezná.

Převod řetězce na integer se provádí funkcí CInt (nebo CLng na 4-bajtové číslo), takže zkuste Cint(AktualniMnozstvi), někdy to automatické přetypování hodnot není automatické a vzhledem k tomu jak ten kód celý máte pro mě jaxi složitě natypovaný, tak možná konverze typů proměnných budou potřeba

Editoval kamlan (18. 12. 2021 21:03:23)

Offline

Zápatí