Применение динамического форматирования в Excel для нескольких таблиц на одном листе - PullRequest
0 голосов
/ 21 сентября 2019

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

В настоящее время я выполняю форматирование на основе другой ячейки с приведенным ниже кодом.Пример того, чего я пытаюсь достичь: http://prntscr.com/p3sof8

Код:

Private Sub Worksheet_Change(ByVal Target As Range)
    With Target
        If .Count = 1 Then
            If .Column = 1 Then
                If .Value <> "BTC" Then
                    .Offset(, 1).NumberFormat = "0.00000000" & """ " & .Value & """"
                Else
                    .Offset(, 1).NumberFormat = """" & ChrW(&HE3F) & """" & "0.00000000"
                End If
            End If
        End If
    End With
End Sub

Это прекрасно работает для одного листа.

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

Например, в таблице 1 валюта вводится в столбец A, а отформатированная ячейка имеет видв столбце B. В таблице 2 входной столбец - C, а результаты - в E и F и т. д.

Можно ли изменить приведенный выше код таким образом, чтобы я мог использовать его для разных таблиц на одном листе?

Большое спасибо за ваши идеи!

1 Ответ

0 голосов
/ 23 сентября 2019

Поскольку он привязан к таблицам и у вас не может быть повторяющихся имен таблиц, вы можете поместить его в ThisWorkbook и начать так:

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)

... и он будет работать на каждом листе.

.. или как на конкретном листе, если это необходимо только на одном листе:

Private Sub Worksheet_Change(ByVal Target As Range)

.. затем:

    Dim lObj As ListObject, cl As Long, ofs As Long, rsz As Long, fc As Long
    With Target
        If .Count = 1 Then
            Set lObj = .ListObject
            If Not lObj Is Nothing Then
                fc = lObj.Range.Cells(1).Column - 1
                Select Case lObj
                    Case "Table1"
                        cl = 1 + fc 'Starting column
                        ofs = 1 'Offset
                        rsz = 1 'Resize(number of columns)
                    Case "Table2"
                        cl = 3 + fc 'Starting column
                        ofs = 2 'Offset
                        rsz = 2 'Resize(number of columns)
                    'Case "Table3"
                    '    cl = 4 + fc 'Starting column
                    '    ofs = 7 'Offset
                    '    rsz = 1 'Resize(number of columns)
                End Select

                If .Column = cl Then

                    Select Case .Value
                        Case "BTC"
                            .Offset(, ofs).Resize(, rsz).NumberFormat = """" & ChrW(&HE3F) & """" & "0.00000000"
                        Case "EUR"
                            .Offset(, ofs).Resize(, rsz).NumberFormat = "0.00" & """" & ChrW(8364) & """"
                        Case Else
                            .Offset(, ofs).Resize(, rsz).NumberFormat = "0.00000000" & """ " & .Value & """"
                    End Select
                End If
            End If
        End If
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...