Как обновить значение ячейки в таблице Excel, используя функции VBA и Match? - PullRequest
0 голосов
/ 16 октября 2019

здесь не профессионал VBA, но стараюсь изо всех сил ...

Цель состоит в том, чтобы создать макрос, который обновляет значение ячейки в таблице на основе переменной строки таблицы из функции Application.Match, котораяЯ тоже борюсь с. Вот то, что у меня есть, и где я потерян (также прокомментирован в коде).

  1. Я не могу получить функцию соответствия, чтобы установить мою переменную TargetRw равнойстрока в таблице. Поскольку в настоящее время я получаю «Несоответствие типов», но я попытался несколько разных конфигураций и получил множество различных ошибок.

  2. Если я могу заставить соответствие работать,Я хотел бы иметь возможность установить значение ячейки TargetRw и столбца таблицы «Reviewed Rate» = равным значению в переменной «Rate». Я не смог найти много онлайн о том, как ссылаться на диапазон таблицы, как это, чтобы обновить значение ячейки.

    Sub ReviewTracker()
    
    Dim Acell As Variant
    Dim TargetRw As Long
    Dim Rate As Variant
    Dim MACMtable, RCtable, TargetTable As ListObject
    Dim LUTables As Worksheet
    
    
        Set LUTables = ThisWorkbook.Sheets("LookupTables")
    
        Set MACMtable = LUTables.ListObjects("MACM_Lookup")
        Set RCtable = LUTables.ListObjects("RC_Lookup")
    
        Asht = ActiveSheet.Name
        Acell = ActiveCell.Value
        Rate = ActiveCell.Offset(0, -3).Value
    
        If Asht = "Rate Codes" Then
        Set TargetTable = RCtable
        Else
        If Asht = "MACMs" Then
        Set TargetTable = MACMtable
        End If
            End If
    
        ***''' Can't get the TargetRw variable below to work... Type Missmatch'''***
        TargetRw = Application.Match(Acell, TargetTable.ListColumns(1), 0)
    
        With TargetTable
            ******'''I am trying to figure out how to set the cell corresponding to the row: TargetRw & Column 6 (name: "Reviewed Rate") to the value of the variable 'Rate'******
    
        .DataBodyRange.Cells(TargetRw, 6) = Rate.Value '''This doesn't seem to work, but hopefully illustrates the goal'''
    
        End With
    

    End Sub

Там2 таблицы на одном листе (переменная: «LUTables»). Один или другой будут обновлены в зависимости от активной таблицы во время запуска макроса. У обоих есть столбец с именем «Скорость просмотра», который также является 6-м столбцом в каждой таблице.

Любая помощь будет принята с благодарностью!

1 Ответ

1 голос
/ 16 октября 2019
TargetTable.ListColumns(1)

должно быть

TargetTable.ListColumns(1).DataBodyRange

ListColumn - это не то же самое, что Range

Не проверено:

Sub ReviewTracker()

    Dim Acell As Variant, Asht As String
    Dim TargetRw As Variant '***
    Dim Rate As Variant
    Dim TargetTable As ListObject
    Dim LUTables As Worksheet

    Set LUTables = ThisWorkbook.Sheets("LookupTables")

    Asht = ActiveSheet.Name
    Acell = ActiveCell.Value
    Rate = ActiveCell.Offset(0, -3).Value

    If Asht = "Rate Codes" Then
        Set TargetTable = LUTables.ListObjects("RC_Lookup")
    ElseIf Asht = "MACMs" Then
        Set TargetTable = LUTables.ListObjects("MACM_Lookup")
    End If

    TargetRw = Application.Match(Acell, TargetTable.ListColumns(1).DataBodyRange, 0)

    If Not IsError(TargetRw) Then
        TargetTable.DataBodyRange.Cells(TargetRw, 6) = Rate '### no .Value
    End If

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...