Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 带百分比的用户表单列表框?_Vba_Excel_Listbox_Userform - Fatal编程技术网

Vba 带百分比的用户表单列表框?

Vba 带百分比的用户表单列表框?,vba,excel,listbox,userform,Vba,Excel,Listbox,Userform,我在userform中使用一个列表框,它显示一个列中的唯一值,该列的格式为百分比。我使用dictionary对象生成一个唯一的列表/值,并将其提供给listbox 我的问题是,列表框中的所有值都显示为十进制数字,而不是百分比。知道如何以百分比/格式显示它们吗 仅供参考:列表框值可以更改,具体取决于用户选择文本/数字/日期/货币/百分比 唯一列表代码 Sub UniqData(fString As String, cbNr As Integer) ' fString as string Dim d

我在userform中使用一个列表框,它显示一个列中的唯一值,该列的格式为百分比。我使用dictionary对象生成一个唯一的列表/值,并将其提供给listbox

我的问题是,列表框中的所有值都显示为十进制数字,而不是百分比。知道如何以百分比/格式显示它们吗

仅供参考:列表框值可以更改,具体取决于用户选择文本/数字/日期/货币/百分比

唯一列表代码

Sub UniqData(fString As String, cbNr As Integer) ' fString as string
Dim d As Object

With Sheets("xxx")
cNr = WorksheetFunction.Match(fString, .Rows(1), 0)

lRo = .Cells(Rows.Count, 1).End(xlUp).Row
arrD = .Range(.Cells(2, cNr), .Cells(lRo, cNr))
    Set d = CreateObject("scripting.dictionary")
     For Each c In arrD
            If Len(c) > 0 Then
                d00 = dic.Item(c.Text)
            End If
      Next c
    k = d.keys
End With

UserForm1.Controls("lb" & cbNr).List = k

End Sub

就像这样。

正如@Meehow所提到的,如果数据太大而无法在单元格中显示,则使用
c.Text
可能会产生错误

因此,在
d.Add
行中使用
Format(c.Value,“0.0%”)作为键,您将获得Excel单元格中的格式:
Sub UniqData(fString作为字符串,cbNr作为整数)'fString作为字符串
将d作为对象

With Sheets("xxx")
    cNr = WorksheetFunction.Match(fString, .Rows(1), 0)

    lRo = .Cells(Rows.Count, 1).End(xlUp).Row
    arrD = .Range(.Cells(2, cNr), .Cells(lRo, cNr))
    Set d = CreateObject("scripting.dictionary")
    For Each c in arrD
        d.Add Format(c.Value, c.NumberFormat), c.Value
    Next c
    k = d.keys
End With

UserForm1.Controls("lb" & cbNr).List = k

End Sub

使用电子表格格式化单元格只会修改数字如何直观地呈现给用户。基本价值保持不变

因此,在将该值添加到字典中时,需要将其显式格式化为所需的格式

d.Add Format(c, "0.0%"), c 

你怎样填字典?你能发布你的代码吗?我看不到在d之前有任何变量a的引用。添加a,a,所以我猜你的意思是c。将列的宽度设为####,然后重试;)@Meehow:事实上,我从来没有想过(我从来没有使用
.Text
,但当我回答时,它突然出现在我的脑海中!)谢谢你指出它!;)谢谢你的回答,如果Len(c)>0,那么d00=dic,我会在ftArr中使用每个c。如果下一个c对不起,我已经编辑了我的帖子,项目(c.Text)结束。我用“.item”。任何想法。tiem(c.text)给了我错误。请尝试我发布的代码的最后一个版本,并告诉我是否有错误:哪一行和哪一个错误。告诉我代码的结果和你想做的有什么不同。