2016-04-05 50 views
5

Przy każdej wartości tekstowej mogę indywidualnie formatować każdy znak, a następnie skopiować to formatowanie do innej komórki, wykonując iterację w kolekcji Range.Characters().Dlaczego komórki numeryczne nie mają właściwości .Characters()?

Jednak jeśli komórka jest liczbą (nawet jeśli liczbaFormat wyświetla ją jako ciąg, np. Daty), to nie ujawnia ona właściwości .Characters() i rzeczywiście nie może być selektywnie sformatowana cyfra po cyfrze.

Dlaczego w programie Excel wyświetlane są ciągi znaków przy użyciu obiektów znaków, ale nie liczb, nawet jeśli numer jest wyświetlany jako ciąg?

+0

Jeśli liczba jest sformatowana jako tekst (tj. * "Wyświetlany jako ciąg" *), możesz formatować poszczególne znaki/cyfry. Jeśli jest sformatowany jako liczba, to 10 to nie 10, to jest 0A. – Jeeped

+0

@Jeeped Otrzymuję, że tekst może być sformatowany jako seria znaków. Co ja ** myślałem ** było przypadkiem, że obiekty Characters() zostały użyte jako warstwa prezentacji (szczególnie dla rzeczy takich jak DateValues ​​wyświetlane jako zapisane daty). dla dowolnych wartości, ale najwyraźniej nie dla liczb. Próbuję tylko dowiedzieć się, co się właściwie ** dzieje. – Kaz

+5

Prawda może cię przerazić. Możesz wziąć niebieską pigułkę i zobaczyć obiekt 'Range' z magicznymi właściwościami, albo możesz wziąć czerwoną pigułkę, faceoffoff z COM i" rzeczywistym "modelem obiektu Excel, i zobaczyć, jak głęboko zagłębia się królik. Podobała mi się niebieska pigułka. –

Odpowiedz

1

Jeśli chcesz, aby przejść wokół tego, można wykonać następujące czynności:

W komórce A1 put „123456 z"”" znak z przodu. Następnie napisać

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

To zajmie tylko pierwsze trzy numery, nie biorąc pod uwagę „'” znak. W związku z tym liczba jest wyświetlana w postaci ciągu, ale nadal można używać jej do obliczeń, np. A1 + 4 daje 123460.

+0

Doceniam tę sugestię, ale nie jestem zainteresowany obejściem tak bardzo jak zrozumienie ** dlaczego ** oni są różni i co faktycznie dzieje się "pod maską", aby spowodować różnicę. – Kaz

+0

Chodzi o to, że liczba jest zawsze liczbą w komórce, nawet jeśli jest sformatowana tak, aby wyglądała jak tekst. VBA nie dba o to, jak wygląda w Excelu w tym przypadku - wie, że jest to liczba i dlatego nie może mieć Range.Characters. Z podobnego powodu nie możesz nazwać zmiennej, zaczynając od liczby w VBA, np. 123_my_variable. – Vityata