Teď fakt nechápu, co řešíte ...
Vícenásobné uvozovky jsou problém? pro koho ?
makro, tak jak jsem ho popsal FUNGUJE nejen u mne na Linuxu, ale -a to je hlavní - u kolegyně na Win.
Nebudu se hádat, jestli čárka nebo tečka ... s čárkou mi to házelo chybu, s tečkou to funguje a počítá přesně to, co chci.
rows = num_rows( oSheet )
If rows > 1 Then
mySetCellString( oSheet, 10, 0, "Provize" )
FOR row = 2 TO rows+1
oCell = oSheet.getCellByPosition( 10, row-1 )
form =
"=IF( 'pokud
OR(
H" & row & "=""Petr""; 'H = Petr nebo
H" & row & "=""Pavel"" 'H = Pavel
);
I" & row & "*0.029; 'zde bude I*0.029
IF(H" & row & "=""Havel""; 'jinak pokud H = Havel
I" & row & "*0.024; ' bude zde I*0.024
"""" ' jinak zde nebude nic
) ' prostě vnořená podmínka ..
' formátování upraveno pro lepší porozumění,
' přímo takto zkopírované do
' editoru maker asi vyhodí při spuštění error
)"
' oCell.setformula("=I"& row &"*0.024") toto je
' zakomentovaný řádek,na kterém jsem zjistil, že
' čárku nelze použít
oCell.setformula(form)
NEXT row
Else
msgbox "List 'Data' žádná data neobsahuje "
Exit Sub
End If
To je snad pochopitelné a nevím, kde v tom vidíte chybu, když to u mně funguje
Ještě jsem pozorněji projel váš koment, no popravdě IFS ani neznám ( bohužel, je to tak ), tak jsem vnořoval ... jen detail.
Dále ... sloupec B obsahuje údaj, podle ḱterého seskupuji (místo prodeje ) a chtěl bych vytvořit sumy ze sloupců 8 (hodnota nákupu ) a 10 (vypočítaná v předchozím kroku provize ). Kdyby někdo nevěděl jak na to v makru ( vytvořit mezisoučty ) tak jsem našel toto zajímavé řešení :
dim oSTColumns(1) as new com.sun.star.sheet.SubTotalColumn
myRange = oSheet.getCellRangeByName( "A1:K"&rows+1 )
oSTDesc = myRange.createSubTotalDescriptor(true)
oSTColumns(0).Column = 8 ' počítáme sloupec 8
oSTColumns(0).Function = com.sun.star.sheet.GeneralFunction.SUM ' funkce SUM
oSTColumns(1).Column = 10 ' počítáme sloupec 10
oSTColumns(1).Function = com.sun.star.sheet.GeneralFunction.SUM ' funkce SUM
oSTDesc.addNew( oSTColumns(), 2) 'seskupit podle sloupce 2
myRange.applySubTotals( oSTDesc, True )
Fakt zajímavé ...
z toho množství dat, co tam mám, nakonec chci vidět jen seskupovací položku( sloupec 2 ) , sloupec 8 a 10. Ostatní skryju
hide_col( osheet, 0 )
hide_col( osheet, 1 )
hide_col( osheet, 3 )
hide_col( osheet, 4 )
hide_col( osheet, 5 )
hide_col( osheet, 6 )
sub hide_col( oTarSheet as Object, number as integer )
Dim oColumn as Object
oColumn = oTarSheet.Columns.getByIndex( number )
oColumn.IsVisible=False
end SUB
šikovné ..
jo a pak se ještě přepnu na list s mezisoučtama ( tlačítko, kterým se toto makro spouští je na samostatném listu, sekretářka si zaslaná data zkopíruje do listu "data" přepne se na list s tlačítkem a zmáčkne ...
toto je krapet kostrbaté, zachycené makro, ale jiné řešení, jak se přepnout na daný list jsem nenašel ..
dim argsj(0) as new com.sun.star.beans.PropertyValue
argsj(0).Name = "Nr"
argsj(0).Value = 2
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dispatcher.executeDispatch(document, ".uno:JumpToTable", "", 0, argsj())
Andrew Pitonyak by to možná udělal hezčí, no ale funguje i toto, tak to nechám tak ...
Editoval MilanUhrak (10. 8. 2018 11:25:48)