2010-02-01 88 views
4

我有列A中的员工列表,以及他们的状态(从下拉菜单中选择“活动”或“非活动”)列B中。他们位于名为“员工列表” 。根据条件删除单元

当员工的状态设置为“非活动”时,我想要自动将员工剪切并粘贴到其他工作表。另一个表被称为“杂项”

如果当状态设置为“非活动”时无法自动完成,那么我可以设置一个按钮来调用该工作表中的VBA命令,以清除所有不活动的员工列表并将它们移动到另一个表。

回答

4

我比Ben M更加渴望声望,所以我会给你发一些代码。 :)你当然应该听取他的建议,并开始阅读好书。

以下可能会使用一些微调,但应该是一个很好的起点。如果,当你写的,你希望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代码中的注释,以帮助突出显示代码语法的方式。每次在代码中使用'''时,它都会突出显示。因此,避免在您的评论中出现“不要”等收缩,并在您的评论栏中添加单引号。 – 2010-02-02 13:05:21

+0

谢谢彼得! 我会在接下来的几天尝试实施它,并告诉你它是如何发生的。 我被赋予了更多的时间来完成这项任务,并且我得到了更多的“紧急”工作,所以我会在今天或明天晚些时候尝试。 – ialm 2010-02-02 15:42:31

+0

喔,就像魅力一样。非常感谢,彼得!有一件事是 - 在这个动作生效之后,是否有一种清理清单的方法?例如,假设我将列表中间的员工设置为“非活动”,它会将员工移出列表,但现在列表中的空行成为空行。无论如何,再次感谢! – ialm 2010-02-03 14:56:09

5

一旦开始使用Excel VBA的最佳方法是记录宏并查看它们生成的代码。这样您就可以看到如何使用VBA代码在Excel中操作对象。

此外,请考虑获得VBA Developer's Handbook。它基于较旧版本的Office,但VBA在Office的最新版本中并没有太多变化(如果有的话),所以它仍然是一个很好的阅读。

学习对象实例化,循环,条件逻辑,字符串连接等基本的东西,这将带你很长的路要走。


对于您当前的问题,您可能要做的是记录剪切和粘贴移动的宏,并查看它生成的代码。然后看看你是否可以弄清楚如何修改该代码以适应你的目的。

回到堆栈溢出,并询问非常具体的问题如果你卡住了,这是一个很好的答案。例如,您可能会说“如何循环遍历我的单元格范围以应用此副本并粘贴?”。

+0

感谢您的提示。 他们给了我更多时间来修改电子表格,所以我想我会花时间学习一些VBA语言,然后再继续。 (虽然我看到有人用下面的代码回答......诱人) 我一直在玩“Record Macros”,它帮助用excel自动化一些小东西,并且它已经帮了很多!谢谢:) – ialm 2010-02-02 15:41:17