2010-02-01 76 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