Как обновить значение в диапазоне ячеек, используя L oop в Excel VBA - PullRequest
0 голосов
/ 17 марта 2020

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

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

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

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

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

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

Этот подход был рекомендован другим пользователем на этом сайте, однако при запуске этого кода я получаю следующую ошибку:

Run- ошибка времени '13': несоответствие типов

Может кто-нибудь помочь мне определить, что не так с этим кодом?

1 Ответ

1 голос
/ 17 марта 2020

Этот код должен делать то, что вы спрашиваете:

Sub Test()

    Dim x As Long

    'Set reference to your table.  Have hard-coded the sheet name and table name in.
    Dim MyTable As ListObject
    Set MyTable = ThisWorkbook.Worksheets("Sheet1").ListObjects("Table_Sheet1")

    'These will be the numerical index numbers of the columns in your table.
    'This assumes your "Locked" column is in the table and has the header "Locked".
    Dim Required As Long, Fitted As Long, Locked As Long
    Required = MyTable.ListColumns("Quantity Required (m)").Index
    Fitted = MyTable.ListColumns("Quantity Fitted (n)").Index
    Locked = MyTable.ListColumns("Locked").Index

    'Look at each row in the table.  Am using `x` rather than `Each Cell`
    'as the row number of the cell may differ from the row location in the table
    'e.g. If your table starts on row 2, then first row after the header is row 3 - row 3 as Cell, but row 1 in table.
    For x = 1 To MyTable.Range.Rows.Count
        'If Locked column doesn't say "Locked" then copy value from
        'Fitted to Required columns, otherwise do nothing.
        If MyTable.DataBodyRange.Cells(x, Locked) <> "Locked" Then
            MyTable.DataBodyRange.Cells(x, Fitted) = MyTable.DataBodyRange.Cells(x, Required)
        Else
            'Do Nothing.
            'The ELSE and comment aren't really needed - just here to show nothing happens.
        End If
    Next x

End Sub  

В ответ на ваш вопрос Set - Set используется для назначения ссылки на объект.
Найдено этот другой вопрос, который может ответить лучше. Рассмотрим код ниже:

Sub Test2()

    Dim MyCellValue As String
    Dim MyCellReference As Range

    'Will only contain the string value held in A3 as
    'the default property of a cell is the value.
    MyCellValue = Sheet1.Range("A3")
    MyCellValue = 3 'This changes the value of MyCellValue.
    'MyCellValue.Font.Bold = True 'Doesn't compile as "Invalid Qualifier"

    'Holds a reference to A3.
    Set MyCellReference = Sheet1.Range("A3")
    MyCellReference = 1 'This changes the value held in cell A3.
    MyCellReference.Font.Bold = True

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