Ask Your Question
0

Set a formula from macro basic using countif and regular expression

asked 2017-12-05 23:36:46 +0200

this post is marked as community wiki

This post is a wiki. Anyone with karma >75 is welcome to improve it.

Hi. If I run the following sub against a blank sheet I get Err 508 in cell A4. Clicking on the cell gives the text of the formula, clicking the tick or hitting enter the error remains. Type a additional space at the end of the formula and hit enter the formula works (giving a result of zero!)

Using the same code to populate the cell with a more basic formula (=A1 as in the second line) works first time without the need to add an additional space. What am I doing wrong?

Subroutine

Sub test3
ThisComponent.Sheets(1).getCellByPosition(0,3).setFormula("=COUNTIF(A1:A2, "".*X.*"")")
ThisComponent.Sheets(1).getCellByPosition(0,4).setFormula("=A1")
end Sub

(Edited a bit for better readability by @Lupp)

edit retag flag offensive close merge delete

Comments

I would not recommend wiki questions.

Lupp gravatar imageLupp ( 2017-12-05 23:50:00 +0200 )edit

This is not the problem actually you edit anything in formuale then you will get value. May be ) or ; or = sign

prabhat bolia gravatar imageprabhat bolia ( 2017-12-06 03:40:38 +0200 )edit

1 Answer

Sort by » oldest newest most voted
0

answered 2017-12-06 00:02:13 +0200

Lupp gravatar image

updated 2017-12-06 00:31:21 +0200

There was a very bad (imo) design decision to replace the parameter delimiter, mandatorily a semicolon in old days, for locales where the comma not is used as the decimal separator by the comma by default.
You supposed you can delimit parameters by commas now, too - and everywhere.

In fact still the semicolon is used as parameter delimiter in Calc. Only for the localized version shown in the 'FormulaBar' and for the diplay in cells it is replaced by the comma under certain conditions.
If you insist to use the comma in your BASIC-hosted formulas you need to assign them to the .FormulaLocal property of the target cell. Better get back to the semicolon as the parameter delimiter. There may be a case one day for applying the .SetFormulaArray(FA) e.g. and there is no FormulaLocalArray.

Down with that silly localizeritis! There may also occur problems with localized function names and with add-in functions.

I suppose you either
-1- have set a locale where the comma is the decimal separator or
-2- have wisely set the semicolon as your parameter ("function") delimiter in 'Options' > 'LibreOffice Calc' > 'Formula' > 'Separators' to avoid useless problems across locales or
-3- are using a rather old version of LibO where the semicolon is still mandatory in the role.
If writing a Calc formula in BASIC, it is a string which must regard exactly the syntax for the formula.

(Your Sub works for me with the semicolon instead of the comma.)

After some

edit flag offensive delete link more

Comments

Using the ";" works for me too and I have subsequently changed the separator from "," to ";" as per 2) above so I am continually reminded!

Thank you for ending an evening of pain:-)

Waiwurrie gravatar imageWaiwurrie ( 2017-12-06 00:23:07 +0200 )edit
Login/Signup to Answer

Question Tools

1 follower

Stats

Asked: 2017-12-05 23:36:46 +0200

Seen: 353 times

Last updated: Dec 06 '17