При использовании vb 6.0 для создания ячейки мы не можем принудительно отображать сумму с 2 знаками после запятой, если число не заканчивается на 1-9. Например, 59,12 отображается правильно, но если мы попробуем 59,10, то получим в ячейке 59,1. Пробовал много разных форматов и текстовых выходов, но безуспешно.
В ответ на то, что мы попробовали, ниже приведена часть кода, который мы попробовали с наиболее заметными замечаниями:
StartForm:
ActiveWorkbook.Styles.Add(Name:="NelcoAmt").NumberFormat = "#.00"
'ActiveWorkbook.Styles("Number").NumberFormat = "######.00"
'ActiveWorkbook.Styles("Number").Application.FixedDecimalPlaces = 2
'ActiveWorkbook.Styles("Currency").Application.Caption = ""
'ActiveWorkbook.Styles("Currency").IncludePatterns = False
'ActiveWorkbook.Styles("Currency").Application. = ""
'ActiveWorkbook.Styles("Currency").Application.
'xlSheet.Cells(1, 34).NumberFormat = "@"
'xlSheet.Cells(2, 34).NumberFormat = "#.00"
'xlSheet.Cells(2, 34).Format = "#.00"
ActiveWorkbook.Styles("NelcoAmt").Application.FixedDecimalPlaces = 2
xlSheet.Cells(2, 34).Style = "NelcoAmt": '.NumberFormat = "#.00": 'Number
'For i% = 1 To ActiveWorkbook.Styles.Count
'Text$ = ActiveWorkbook.Styles(i%).Name
'xlSheet.Cells(i%, 1).Style = Text$
'xlSheet.Cells(i%, 1).Value = 59.4
'xlSheet.Cells(i%, 2).Value = Text$
'Next i%
Rem-----9/15/14---set header for variables
xlSheet.Cells(1, 1).Value = "UniqueFormKey"
xlSheet.Cells(1, 2).Value = "FormName"
xlSheet.Cells(1, 3).Value = "OR_EFIN"
xlSheet.Cells(1, 4).Value = "OR_Type"
Rem======================================start of test section
Dim NumAns As Double
'7/16/15
'NumAns = Format$(Format$(Val(Frm941Inp.Scr941(19)), "########.00"), "@@@@@@@@@@@")
txtOut = Format$(Format$(Val(Frm941Inp.Scr941(19)), "########.00"), "@@@@@@@@@@@")
'NumAns = FormatNumber((Val(Frm941Inp.Scr941(19))), 2)
NumAns = Val(Frm941Inp.Scr941(19))
If Val(Frm941Inp.Scr941(18)) = 0 Then txtOut = "0.00"
txtOut = Frm941Inp.Scr941(19)
'xlSheet.Cells(2, 34).NumberFormat = "@": ' = txtOut: '"########.00"]
'xlSheet.Cells(2, 34) = (FormatNumber(Val(Frm941Inp.Scr941(19)), 2), "text"): 'txtOut ', "########.00"): '5d 2 tax on add medi wage
'xlSheet.Cells(2, 34) = "'" & FormatNumber(Val(Frm941Inp.Scr941(19)), 2): 'txtOut ', "########.00"): '5d 2 tax on add medi wage
'txtOut = "'" & txtOut
xlSheet.Cells(2, 34).Style.NumberFormat = "#.00": 'Number
xlSheet.Cells(2, 34) = Format(NumAns, "#.00"): 'txtOut: 'Val(Frm941Inp.Scr941(19)): 'txtOut ', "########.00"): '5d 2 tax on add medi wage
'xlSheet.Cells(2, 34).Style.NumberFormat = "#.00": 'Number
'xlSheet.Cells(2, 34).NumberFormat = "#.00"
'xlSheet.Cells(2, 34).Value = Val(Frm941Inp.Scr941(19))
'xlSheet.Cells(2, 34).value = FormatNumber(Val(Frm941Inp.Scr941(19)), 2): '"#######.00")
'xlSheet.Cells(2, 34).Value = Format$(Format$(Val(Frm941Inp.Scr941(19)), "########.00"), "@@@@@@@@@@@")
'xlSheet.Cells(2, 34).Value = Val(Frm941Inp.Scr941(19)): '5d 2 tax on add medi wage
Rem===================================end of test section=================================================
решение1
Для электронных таблиц: то, что отображается в ячейке, и то, что фактически хранится, может существенно отличаться.
Пример: Значения даты и времени равны 1,0 за день, при этом часы, минуты и секунды представлены в десятичных знаках, поэтому 42205,5 равно «2015-07-20 12:00».
Чтобы число «59,1» (или любое другое число, округляемое до этого значения с точностью до двух десятичных знаков) отображалось как «59,10», вам необходимо установить формат отображения на «0,00» или аналогичный.
Нажмите и удерживайте, CTRLзатем нажмите 1; В диалоговом окне найдите «Число», щелкните по нему и измените «Десятичные знаки» на «2». Теперь щелкните, OK
чтобы установить его и выйти из диалогового окна.
Альтернативой является использование «Пользовательского» (или «Определенного пользователем» для LibreOffice) в том же диалоговом окне и ввод «0.00» в качестве «Кода форматирования» — с тем же конечным результатом.
Как именно это сделать из VBA? Оставлю это вам как задачу.