在vba中格式化为10或十进制的百分比

时间:2016-08-08 13:45:07

标签: excel vba excel-vba

我有一个棘手的问题,我不明白发生了什么以及为什么。

我有一个包含很多百分比值的用户表单。

enter image description here

这些值来自excel表,它们看起来与此完全相同。用户现在可以更改这些值并将它们放回到该Excel工作表中。用户的活动也会保存在日志表中。所有值也都保存在那里。我把这些值放在那里:

Private Sub saveV_Click()
    Dim wsLog As Worksheet
    Dim i As Long
    Dim j As Long
    Dim lastRow As Long
    Dim tbNr As String
    j = 3
    i = 2
    Set wsLog = ThisWorkbook.Worksheets("Log")
    With wsLog
        lastRow = findLastRow(wsLog)
        lastColumn = findLastColumn(wsLog)
        For Each tb In Me.Controls
            If TypeName(tb) = "TextBox" Then
                Select Case i
                    'case 2 and 3 values are fixed and not of any interest
                    Case 2
                        .Cells(lastRow + 1, 1).Value = tb.Value
                    Case 3
                        .Cells(lastRow + 1, 2).Value = tb.Value
                    'the following cases refer to the textboxes you can see in the other picture (there are some more)
                    Case 4 To 46
                        .Cells(lastRow + 1, j).Value = tb.Value
                    Case 47 To 89
                        .Cells(lastRow + 2, j).Value = Format(tb.Value, "0.00%")
                    Case 90 To 132
                        .Cells(lastRow + 3, j).Value = Format(tb.Value, "0.00%")
                End Select
            i = i + 1
            j = j + 1
            If j > lastColumn Then j = 3
            End If
        Next
    End With
    Unload Me
End Sub

代码本身运行良好,但它没有正确格式化值。

如果我使用Format(tb.Value, "0.00%"),我的值将会四舍五入,因此101,49316739%转为101,49%

我尝试添加更多零,但如果我使用Format(tb.Value, "0.000%"),则我的值乘以1000,因此它变为101493%。 (甚至更多的零)

如何以10(或更多)小数保存我的值?

2 个答案:

答案 0 :(得分:2)

public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) { if (convertView == null) { LayoutInflater infalInflater = (LayoutInflater) context .getSystemService(context.LAYOUT_INFLATER_SERVICE); convertView = infalInflater.inflate(R.layout.weekly_event_child_items, null); } Button mybutton = (Button) convertView.findViewById(R.id.button2); mybutton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v1) { ((ExpandableListView) parents).performItemClick(v1,positions, 0); } }); } 函数将值转换为expandableListView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> adapterView, View view, int i, long l) { System.out.println("clicked"); } }); 。这意味着你在这里编码......

Format

...将String的值.Cells(lastRow + 2, j).Value = Format(tb.Value, "0.00%") 转换为&{34; 101,49%&#34;的Double值。 101,49316739的数据类型为String,但您为.Cells(lastRow + 2, j).Value提供了Variant子类型Variant。然后,Excel必须确定您正在写入的值是否实际上可以表示为数字。请注意,String用于显示数字的 可读版 - 不适用于 存储值

让Excel进行格式化:

Format

答案 1 :(得分:0)

如果使用format()函数,则将值转换为字符串,后者由excel解释为格式化。只需使用.Cells().Value = tb.Value.Cells().NumberFormat = "0.0000%"即可获得所需的结果。