Пользовательский формат чисел из пользовательской формы - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть текстовое поле в пользовательской форме, где пользователь помещает единицу измерения (например, «кг»). Я пытаюсь использовать эту единицу для форматирования номера ячейки (чтобы добавить единицу после значения в ячейке)

Sub Custom_unit()

Dim Cust_un As String

Cust_un = IM_Form1.TextBox1.Value
Selection.NumberFormat = "0" & Cust_un

End Sub

Это моя попытка, но когда я пытаюсь запустить ее, я получаю Run ошибка 1004: невозможно установить свойство NumberFormat класса Range.

1 Ответ

0 голосов
/ 16 февраля 2020

Как добавить кавычки в NumberFormat

При вводе из текстового поля вы получаете строковое значение, например, «кг». Чтобы использовать его в качестве суффикса NumberFormat, вам необходимо заключить единичную строку в кавычки.

Это можно сделать, назначив

Selection.NumberFormat = "0" & """" & Cust_un & """"

или, альтернативно,

Selection.NumberFormat = "0" & Chr(34) & Cust_un & Chr(34)

Обратите внимание, что VBA не может ни интерпретировать одну кавычку (") как строку, ни одиночная кавычка, заключенная в начальную и конечную кавычки ("""). Вам нужно вместо этого включить пару кавычек в окружающие кавычки, то есть """", чтобы сделать это понятным. В альтернативе используется функция Chr(), возвращающая строку, содержащую символ, связанный с указанным кодом символа 34, то есть символ двойной кавычки.

Вы можете использовать функцию справки для возврата правильного NumberFormat, например

Function getNumberFormat(ByVal unit As String, Optional NumFmt As String = "0 ") As String
    unit = Replace(unit, Chr(34), vbNullString)         ' remove existing double quotes
    getNumberFormat = NumFmt & Chr(34) & unit & Chr(34) ' build NumberFormat including quotes around unit
    ' or: getNumberFormat = NumFmt & """" & unit & """"
End Function

Пример вызова

Если ваша Custom_unit() процедура находится в модуле кода UserForm, используйте Me.TextBox1.Text для ссылки на текущий экземпляр UserForm вместо ссылаясь на экземпляр по умолчанию пользовательской формы. Пример вызова может быть следующим:

Sub Custom_unit()
    Selection.NumberFormat = getNumberFormat(Me.TextBox1.Text)
End Sub

Кстати, подсказка: в большинстве случаев лучше избегать ссылок на выборки, c .f. Как избежать использования Select в VBA?

...