我有一个棘手的问题,我不明白发生了什么以及为什么。
我有一个包含很多百分比值的用户表单。
这些值来自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(或更多)小数保存我的值?
答案 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%"
即可获得所需的结果。