ссылка на ячейку в другом листе. DYNAMIC / ПЕРЕМЕННОГО - PullRequest
0 голосов
/ 17 августа 2010

У меня есть вопрос о ссылке на ячейку в другом листе. У меня есть этот код в VBA:

Если Application.CountIf (.Rows (Lrow), '8000') = 0 И Application.CountIf (.Rows (Lrow), '9000')) = 0 Тогда .Rows (Lrow) .Delete

Который способен мне удалить любую строку БЕЗ слов 8000 и 9000. Однако, поскольку в будущем будет обновление, как я могу настроить код таким образом, чтобы значение для Excel для выполнения могло быть «ДИНАМИЧНЫМ» (то есть не жестко прописанным) Скажем, если я введу число в ячейке (17,2) в ЛИСТЕ 1, что я могу сделать, чтобы Excel смотрел на адрес ячейки вместо «абсолютного значения» из ЛИСТА 2 VBA?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 18 августа 2010

Вы можете добавить столбец X к исходному листу с заголовком «Condx for DELETE» и заполнить этот столбец формулой, представляющей условие DELETE в виде логического значения - как в вашем случае: = НЕ (ИЛИ (A2 = 8000,A2 = 9000)) (предполагаемые значения 8000, 9000 и т. Д. Появляются в столбце A)

Затем вы циклически перебираете исходную таблицу и удаляете все записи, для которых столбец X равен TRUE.При условии, что

  • ваш источник был определен в VBA как объект диапазона (MyRange)
  • , первая строка является строкой заголовка
  • нет пустых ячеек в первом столбцемежду заголовком и концом списка
  • условие находится в 3-м столбце

очиститель может выглядеть следующим образом

Sub MySub()
Dim MyRange As Range, Idx As Integer, MyCondx As Integer

    Set MyRange = ActiveSheet.[A1]      ' represent source data as a range
    Idx = 2                             ' asuming one header row
    MyCondx = 3                         ' asuming condition is in 3rd column

    Do While MyRange(Idx, 1) <> ""
        If MyRange(Idx, MyCondx) Then
            MyRange(Idx, 3).EntireRow.Delete
        Else
            Idx = Idx + 1
        End If
    Loop
End Sub

Таким образом, вы получаете полную прозрачность,нет жесткого кодирования, и вы очень гибки, чтобы не только изменить набор из 2 значений, но и указать, какое условие служит бизнесу.

Надеюсь, это поможет - удачи

0 голосов
/ 17 августа 2010

Вы можете добавить эти несколько строк над кодом, который у вас уже есть. Это предполагает, что вы хотите изменить любое число, введя их в ячейку B17 или B18.

Dim lowerBound as Long, upperBound as Long
lowerBound = Sheet1.Range("B17").Value
upperBound = Sheet1.Range("B18").Value

Затем замените '8000' на нижний предел, а '9000' на верхний предел.

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