проверить строку формата для числовых значений в excel (ДНК)

Я использую ДНК Excel для управления надстройкой Excel. Там я применяю числовой формат к ячейке, используя Range.NumberFormat = myformat;. Я не знаю заранее строку myFormat, она определена в бэкенде.

В хороших случаях myFormat — это что-то вроде «0.00;(0.00)» или «# ##0,00\ _€;[Red]-# ##0,00\ _€», в других — что-то вроде «toto». В последнем случае в ячейке excel отображается ########## или что-то бессмысленное.

Итак, есть ли способ проверить, что строка myFormat является допустимым числовым форматом для Excel, прежде чем применять формат к ячейке?

Спасибо, Марио.


person Mario    schedule 27.02.2017    source источник
comment
Я почти уверен, что ####### просто означает, что ячейка недостаточно широка для отображения значения. Ваш пример форматирует возвращаемые значения для меня.   -  person Darren Bartrup-Cook    schedule 27.02.2017
comment
Да, с примерами правильного формата Excel отображал значение в правильном формате, и оно помещалось в половину ячейки. Но в примере с неправильным форматом excel иногда отображает ####, а значение формата (например, toto) — в других случаях.   -  person Mario    schedule 27.02.2017
comment
Каковы примеры неправильных форматов? Если вы отформатируете toto, то да, вы получите 0 = toto, 1 = toto, -1 = -toto.   -  person Darren Bartrup-Cook    schedule 27.02.2017
comment
Может быть, я не правильно объяснил. Прости. То, что я хочу, очень просто: у меня есть строка myFormat, которую я хочу применить в качестве числового формата к ячейке, используя excel dna. Но сначала я хочу проверить, является ли строка myFormat допустимым числовым форматом. Например, 0,00;(0,00) допустимо, а toto — нет. Я не знаю заранее строку myFormat, они определены в каком-то бэкэнде.   -  person Mario    schedule 27.02.2017
comment
В этом случае, возможно, вы можете создать массив допустимых форматов и проверить свою строку на соответствие каждому элементу в этом массиве. myarray = array(0.00;(0.00), # ##0,00\ €;[Red]-# ##0,00\ _€, _(#.##);(# .##), # ???/???). Если ваша строка не соответствует ни одному из ваших допустимых форматов, измените ее на соответствующую.   -  person John Muggins    schedule 27.02.2017
comment
Это сработает, если я знаю все возможные комбинации для формата. Даже там, может быть, было бы лучше создать регулярное выражение, но я не знаю, как excel манипулирует строками форматов.   -  person Mario    schedule 28.02.2017
comment
Я подумал, может быть, что-то вроде IsNumericFormat = IsNumeric(Target.Text) вернет логическое значение на основе отображаемого значения в ячейке. Однако вам нужно будет поместить значение в ячейку и сначала применить форматирование, а такие числа, как 5,00%, вернут false, поскольку% не является числовым. Я также думал о IsNumericFormat = IsNumeric(Format$(Target.Value, Target.NumberFormat)), но опять же для таких чисел, как -20, ячейка отображает - 20, а Format$ отображает - 020 _€, но это работает для определенных числовых форматов. Просто выбрасываю его как возможное решение, полное дыр.   -  person Darren Bartrup-Cook    schedule 28.02.2017


Ответы (1)


person    schedule
comment
это хорошо, чтобы проверить, есть ли у нас два разных формата в двух диапазонах, но я хочу проверить, является ли данная строка допустимым числовым форматом для применения к ячейке - person Mario; 27.02.2017
comment
Я просто даю вам необходимую логику. Я не пытался писать код для тебя, Марио. если variable.numberformat = myformat, то сделайте что-нибудь еще; сделать что-нибудь еще. - person John Muggins; 27.02.2017
comment
да, но мой вопрос совсем о другом. Я хочу проверить, действителен ли мой формат, прежде чем применять формат. Если я сделаю rng1.NumberFormat=toto, Excel отобразит что-то бессмысленное. Итак, я хочу проверить, действителен ли myFormat, прежде чем перейти к строке rng1.NumberFormat = myFormat - person Mario; 28.02.2017
comment
Я это понимаю. Как вы уже знаете, если вы поместите неверный числовой формат в ячейку или столбец, ошибки не будет. Это просто даст вам тарабарщину данных. Насколько я понимаю, единственный способ убедиться, что любая строка содержит допустимый числовой формат, — это проверить ее по списку известных хороших форматов. Если оно не совпадает ни с одним из них, то это не очень хорошее число. Есть ли ограничение на количество строк неправильного формата, которые вы получаете от своего серверного программного обеспечения? Возможно, было бы проще составить список этих строк неправильного формата и сравнить с ними вашу переменную. - person John Muggins; 28.02.2017