Удаление клеток на основе условий - PullRequest
4 голосов
/ 01 февраля 2010

У меня есть список сотрудников в столбце A и их статус (выбранный из выпадающего меню «Активный» или «Неактивный») в столбце B. Они находятся на листе под названием «Список сотрудников».

Когда для статуса сотрудника установлено значение «Неактивно», я хочу автоматически вырезать и вставить сотрудника на другой лист.Другой лист называется «Разное»

Если это невозможно сделать автоматически, когда для состояния установлено значение «Неактивно», то, возможно, я могу установить кнопку, которая будет вызывать команды VBA в этом листе, чтобы очистить все неактивныесотрудников из списка и переместите их на другой лист.

Ответы [ 2 ]

5 голосов
/ 01 февраля 2010

Один из лучших способов начать работу в Excel VBA - это записать макросы и посмотреть на код, который они создают. Таким образом, вы увидите, как вы можете манипулировать объектами в Excel, используя код VBA.

Также рассмотрите возможность получения Руководства разработчика VBA . Он основан на более старых версиях Office, но VBA не сильно изменился (если вообще изменился) в последних версиях Office для просмотра, поэтому он по-прежнему хорошо читается.

Изучите базовые вещи, такие как создание объектов, циклы, условная логика, конкатенация строк и т. Д., И это займет у вас долгий путь.


Что касается вашей текущей проблемы, то, что вы можете сделать, это записать макрос движения вырезания и вставки и посмотреть, какой код он создает. Затем посмотрите, сможете ли вы выяснить, как изменить этот код в соответствии с вашими целями.

Вернитесь к переполнению стека и задайте очень конкретные вопросы , если вы застряли, и это лучший способ получить хороший ответ. Например, вы можете сказать: «Как я могу выполнить цикл по диапазону ячеек, чтобы применить эту копию и вставку?».

4 голосов
/ 02 февраля 2010

Я жажду репутации больше, чем Бен М, поэтому я пришлю вам код.:) Вы все равно должны принять его совет и начать читать хорошие книги.

Следующее может использовать некоторую тонкую настройку, но должно быть хорошей отправной точкой.Если, как вы написали, вы хотите, чтобы Excel автоматически перемещал имя и статус сотрудника, как только будет сделан выбор Неактивно, это должно помочь:

Private Sub Worksheet_Change(ByVal Target As Range)

    Application.EnableEvents = False

    ' Only react to edits in Column B:  '
    If Not Intersect(Target, Sheets("Employee List").Range("B:B")) Is Nothing Then

        ' Dont do anything if > 1 cell was just changed:   '
        If Target.Cells.Count = 1 Then

            ' Only make the change if the new value in Col B is "inactive":    '
            If Target.Value = "Inactive" Then

                ' Find the next available cell on the Misc sheet for a name:   '
                Dim nextRange As Range
                Set nextRange = Sheets("Misc").Range("A65536").End(xlUp).Offset(1, 0)

                ' Cut the employee name and status and paste onto the Misc sheet:   '
                Range(Target, Target.Offset(0, -1)).Cut
                Sheets("Misc").Paste       Destination:=Sheets("Misc").Range(nextRange.Address)

            End If
        End If

    End If


    Application.EnableEvents = True

End Sub

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

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