2016-04-05 2 views
5

С любым текстовым значением я могу индивидуально форматировать каждый символ, а затем копировать это форматирование в другую ячейку, итерации по коллекции Range.Characters().Почему числовые ячейки не имеют свойства .Characters()?

Однако, если ячейка является номером (даже если номерFormatting отображает ее как строку, например, даты), то она не предоставляет свойство .Characters() и, действительно, не может быть выборочно отформатирована по цифрам.

Почему Excel отображает строки, используя объекты символов, но не числа, даже если номер отображается в виде строки?

+0

Если число отформатировано как текст (то есть * 'отображается как строка' *), вы можете отформатировать отдельные символы/цифры. Если он отформатирован как число, то 10 не 10, это 0A. – Jeeped

+0

@Jeeped Я получаю, что текст может быть отформатирован как серия символов. То, что я ** считал **, было тем, что объекты Characters() использовались в качестве уровня представления (особенно для таких вещей, как dateValues, отображаемых в виде письменных дат). для любых значений, но, видимо, не для чисел. Я просто пытаюсь выяснить, что на самом деле происходит **. – Kaz

+5

Истина может вас напугать. Вы можете взять голубую таблетку и увидеть объект «Range» с магическими свойствами, или вы можете взять красную таблетку, faceoff с COM и «реальную» объектную модель Excel, и посмотреть, как глубоко проходит кроличья дыра. Мне понравилась голубая таблетка. –

ответ

1

Если вы хотите, чтобы обойти это, вы можете сделать следующее:

В ячейке A1 Put «123456 с"»" знак впереди. Затем написать

range("A1").Characters(1,3).Font.Bold = true 

Понадобится только первые три цифры, не принимая во внимание «'» знак. Таким образом, число выглядит как строка, но вы все равно можете использовать его вычисления, например. A1 + 4 даст 123460.

+0

Я ценю предложение, но меня не интересуют обходные пути так же, как понимание ** почему ** они разные и что на самом деле происходит «под капотом», чтобы вызвать разницу. – Kaz

+0

Идея состоит в том, что число всегда является числом в ячейке, даже если оно отформатировано, чтобы выглядеть как текст. VBA все равно, как это выглядит в Excel в этом случае - он знает, что это число и, следовательно, он не может иметь Range.Characters. По той же причине вы не можете назвать переменную, начиная с номера в VBA, например. 123_my_variable. – Vityata

Смежные вопросы