Как контролировать значение ячейки в Excel с помощью оператора IF Then в VBA - PullRequest
0 голосов
/ 16 марта 2020

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

В этой таблице 3 столбца; «Количество установлено (n)», «Требуемое количество (м)» и «Конфигурация замка».

Что мне нужно сделать, так это то, что при нажатии кнопки числовые значения для каждой строки в пределах «Количество Подходящий столбец (n) "сбрасывается в соответствии со значениями, отображаемыми в столбце« Необходимое количество (м) »той же строки.

Однако, если значение ячейки в столбце «Конфигурация блокировки» этой строки установлено как «заблокировано», я хочу, чтобы значение «Количество соответствовало (n)» оставалось неизменным после нажатия кнопки.

Надеюсь, это имеет смысл! Вот моя текущая попытка закодировать это:

Public Sub Reset_Quantity_Fitted()
'Macro to make quantity fitted equal to quantity required

    Dim DatRange2 As String

    quantity_required = Worksheets(ActiveSheet.Name).ListObjects("Table_" & ActiveSheet.Name).ListColumns("Quantity Required (m)").DataBodyRange

    Set DatRange = Worksheets(ActiveSheet.Name).ListObjects("Table_" & ActiveSheet.Name).ListColumns("Quantity Fitted (n)").DataBodyRange
    DatRange2 = Worksheets(ActiveSheet.Name).ListObjects("Table_" & ActiveSheet.Name).ListColumns("Lock Configuration").DataBodyRange

    If DatRange2 = "Locked" Then
        DatRange = DatRange
    Else
        DatRange = quantity_required
    End If

End Sub

Я не думаю, что я слишком далеко, но при запуске этого кода я получаю следующую ошибку:

Выполнить ошибка «13»: несоответствие типов

Любая помощь очень ценится! Спасибо!

РЕДАКТИРОВАТЬ! Следуя совету BigBen ниже, я попытался следующий код, но все еще получаю ту же ошибку несоответствия. Кто-нибудь может помочь?

Public Sub Reset_Quantity_Fitted()
'Macro to make quantity fitted equal to quantity required

    Dim rng As Range
    Dim cell As Range

    Set rng = Worksheets(ActiveSheet.Name).ListObjects("Table_" & ActiveSheet.Name).ListColumns("Quantity Fitted (n)").DataBodyRange

For Each cell In rng.Cells

    If rng.Offset(, 5) = "Locked" Then
        cell = Worksheets(ActiveSheet.Name).ListObjects("Table_" & ActiveSheet.Name).ListColumns("Quantity Fitted (n)").DataBodyRange
    Else
        cell = Worksheets(ActiveSheet.Name).ListObjects("Table_" & ActiveSheet.Name).ListColumns("Quantity Required (m)").DataBodyRange
    End If

Next cell

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