Пользовательские форматы Excel, которые ссылаются на ячейки - PullRequest
0 голосов
/ 01 мая 2018

Я хотел бы иметь лист Excel, отображающий пользовательский формат. Пользовательский формат использует содержимое другой ячейки. Вот пример:

Column A : Show a column of numbers in accounting format in the currency of cell(b1).

Cell(B1) : "XYZ"

Предполагается, что пользователи могут вводить свою собственную валюту. Я знаю, что в Excel есть инструменты для форматирования, но это вопрос, который реализует пользовательский формат, основанный на содержимом другой ячейки. Это реальный вопрос ...

Ответы [ 2 ]

0 голосов
/ 01 мая 2018

Если вы хотите что-то вроде этого:

enter image description here

enter image description here

.. затем просто поместите это в модуль листа:

Sub worksheet_Change(ByVal Target As Range)
Dim sFormat As String

If Not Intersect(Target, Range("NumberFormat")) Is Nothing Then
    sFormat = Chr(34) & Target.Value & Chr(34) & " "
    Range("FormatWhat").NumberFormat = sFormat & "$#,##0;" & sFormat & "[Red]-$#,##0;-"
End If

End Sub

... и укажите B1 формат имени числа в поле имени:

enter image description here

... и аналогично назовите некоторые или все столбец A "FormatWhat".

(Использование именованных диапазонов позволяет избежать жесткого кодирования ссылок в вашем коде. Если вы жестко закодируете адрес ячейки в своем коде, эти ссылки будут указывать на неправильное место, если вы (или пользователь) позже добавите новые строки / столбцы выше / Слева от этих жестко закодированных ссылок. Использование Имен избегает этого и делает код более надежным.

Я почти никогда адресами ячеек с жестким кодом в моем коде. Я почти всегда использую таблицы Excel или ListObjects для хранения любых данных, с которыми VBA взаимодействует по той же причине ... ListObject - это динамические именованные диапазоны, которые Excel автоматически расширяет / сжимает для соответствия данным.)

0 голосов
/ 01 мая 2018

Замена листа в таблице личных кодов листа может изменить форматирование чисел в столбце A.

private sub worksheet_change (byval target as range)
    if not intersect(target, range("b1")) is nothing then
        if len(cells(1, "b").value2) = 3 then
            dim f as string
            f = ucase(cells(1, "b").value2)
            f = "0 \" & left(f, 1) & "\" & mid(f, 2, 1) & "\" & right(f, 1)
            range(cells(2, "a"), cells(rows.count, "a").end(xlup)).numberformat = f
        end if
    end if
end sub

Существует максимальное количество пользовательских числовых форматов, которые можно добавить к существующим числовым форматам без удаления ранее созданных cnfs; Я думаю, что около 30 или около того.

...