2010-02-01 3 views
4

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

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

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

ответ

4

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

Следующие могут быть использованы для точной настройки, но должны быть хорошей отправной точкой. Если, как вы писали, вы хотите, 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 не попадал в какой-либо бесконечный цикл.

+1

@Peter Способ предоставления кода! Я немного отредактировал комментарии в коде VBA, чтобы помочь в том, как выделяется синтаксис кода. Каждый раз, когда вы используете '' 'в своем коде, он выделяет его. Поэтому избегайте сокращений, таких как 'don't', в ваших комментариях, а также добавляйте одинарные кавычки в * конец * вашей строки комментариев. –

+0

Спасибо, Питер! Я попытаюсь реализовать его в ближайшие пару дней и расскажу вам, как это происходит. Мне задали больше времени с этой задачей, и мне дали более «срочную» работу, поэтому я попробую это позже или сегодня, и завтра. – ialm

+0

Whoo, работает как шарм. Большое спасибо, Питер! Одна вещь - есть ли (n легкий) способ убрать список после того, как это действие вступит в силу?Например, скажем, я установил сотрудника в середине списка в «Неактивный», он перемещает сотрудника из списка, но теперь theres - пустая строка в списке. В любом случае, еще раз спасибо! – ialm

5

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

Кроме того, рассмотрите вопрос о получении VBA Developer's Handbook. Он основан на более старых версиях Office, но VBA практически не изменился (если вообще) в последних версиях Office, поэтому он по-прежнему хорошо читается.

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


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

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

+0

Спасибо за советы. Они дали мне больше времени для обновления электронных таблиц, поэтому я думаю, что не спешу с ним изучать некоторые из языков VBA, прежде чем продолжить. (Хотя я вижу, что кто-то ответил с некоторым кодом ниже ... заманчиво) И я играл с «Record Macros», и это помогло автоматизировать некоторые мелочи с помощью excel, и это очень помогло! Спасибо :) – ialm

Смежные вопросы