2015-11-17 1 views
3

Я использую listbox в пользовательской форме, которая отображает уникальные значения из столбца, который отформатирован как процент. Я генерирую уникальный список/значения, используя объект словаря и подавая его в список.Userform listbox с процентами?

Моя проблема - все значения показаны как десятичные числа в списке не в процентах. Любая идея, как показать их в процентах/формате ?.

FYI: значения 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 

как это.

+1

Как вы заполняете свой словарь? Можете ли вы разместить свой код? – R3uK

+0

добавлен. спасибо .... – Shan

+0

Я не вижу ссылки на переменную a до d.Add a, так что, я думаю, вы имели в виду c. – R3uK

ответ

1

Как упоминалось в @Meehow, использование c.Text может привести к ошибке, если данные слишком большие для отображения в ячейке!

Таким образом, использовать Format(c.Value, "0.0%") как ключ в d.Add линии, и вы будете иметь форматирование ячейки Excel: Sub UniqData (fString As String, cbNr As Integer) 'fString как строка Dim г 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 
     d.Add Format(c.Value, c.NumberFormat), c.Value 
    Next c 
    k = d.keys 
End With 

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

End Sub 
+0

Ширина столбца, поэтому текст будет #### и повторите попытку;) –

+0

@Meehow: В самом деле, я никогда не думал об этом (я никогда не использую '.Text', но он появился у меня в голове, когда я ответил!) Thx for указав это! ;) – R3uK

+0

спасибо за ответы, я использую для каждого С в ftArr If Len (с)> 0 Тогда d00 = dic.Item (c.Text) End If Следующая гр – Shan

1

Форматирование ячеек, использующих электронную таблицу, изменяет только то, как число будет визуально отображаться для пользователя. Базовое значение остается неизменным.

Поэтому вам нужно явно форматировать значение так, как вы хотите, чтобы оно выглядело, когда вы добавляете его в словарь.

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