2016-04-27 10 views
1

Я вставляю данные в документ Word из электронной таблицы Excel. Существует значение, которое имеет более 2 знаков после запятой. Я использую следующий код, чтобы попытаться преобразовать его в 2 десятичных знака и вставить его в мой документ.Использование .NumberFormat для форматирования десятичных мест в Excel VBA

wdApp.Selection.GoTo what:=-1, Name:="Device_Avail" 
''Referring to the total count column in the Device Availability worksheet. 
Set devAvailRow = shDevAvail.Range("A:A").Find("Overall Totals:",  
After:=Cells(1, 1), searchdirection:=xlPrevious) 

''Actual piece to format value to 2 decimal places. 
shDevAvail.Cells(devAvailRow.Row, 3).NumberFormat = "0.00" 
devAvailPer = shDevAvail.Cells(devAvailRow.Row, 3) 
wdApp.Selection.TypeText devAvailPer 

Значение теперь показывает только 2 десятичных знака, но панель формул показывает намного больше.

enter image description here

И ?Selection.Value в Immediate Window из VBA консоли показывает 89.43448051 тоже. И это вставляется в мой документ.

Почему функция .NumberFormat может изменить ее до 2 знаков после запятой? Что мне нужно изменить?

+3

* NumberFormat * не изменяет сам номер. Это влияет только на визуальное отображение номера. (Было бы очень плохо, если бы он * изменил значения, особенно когда вы занимались сложными бухгалтерскими или финансовыми расчетами. Представьте, какие ошибки могут вызвать?) –

ответ

3

Свойство .NumberFormat является форматом рендеринга и не изменяет значения, хранящиеся в ячейке. Вы можете использовать «Range.Text», чтобы получить отображаемое значение:

Range("A1") = 99.12345 
Range("A1").NumberFormat = "0.00" 
Debug.Print Range("A1").Text ' > 99.12 
Debug.Print Range("A1").Value ' > 99.12345 
2

Формат номера изменяет только формат, который вы видите. В любом случае базовое значение VARIANT. Попробуйте использовать функцию ROUND(), чтобы убедиться, что вы импортируете только 2 знака после запятой.

1

Почему может изменить функцию .NumberFormat его до 2 знаков после запятой? Что мне нужно изменить?

Вообще говоря, вы действительно не хотите изменять точность исходного базового значения. Когда вы это делаете, сценарий «потерянный-пенни» часто вступает в игру; в частности, при расчете и суммарном проценте налогов, процентных ставок, оптовой розничной разметки и т. д.

С учетом этого вы можете быстро изменить точность базового значения на то, что отображается для всей книги, со следующим ,

ActiveWorkbook.PrecisionAsDisplayed = True 

.PrecisionAsDisplayed property является членом Workbook Object. Таким образом, к нему можно получить доступ с помощью ActiveWorkbook property, ThisWorkbook Property или названной книги в Workbooks Collection.

Предупреждение! Это действие не может быть отменено. Как только вы усекаете десятичную точность до отображаемого значения, вы не сможете ее вернуть.

Эта опция также доступна в Excel Options, Advanced, при расчете этой книги установите Precize как показано. Ожидайте аналогичного предупреждения.

+0

Поскольку мы избавились от копейки здесь, в Канаде, значит ли это нам не нужно беспокоиться о сценарии «потерянного пенни» 8) –

+0

На самом деле, поскольку 2 и 7 раунда вниз и 3 и 8 раунда, это больше похоже на «потерянный никель». Мы никогда не теряли потерянных «центов» в наших ценах, просто способность точно платить указанные цены. – Jeeped