2011-12-10 116 views
1

我對VBA相對較新。
我將不勝感激,如果有人能幫助我,下面,可以解決我的問題宏:如何在Excel項目中創建宏

1)我有一個產生兩個不同的Excel與不同數量的葉子和列數不同的報表的Web應用程序,請參見下面。

報告1
Sheet1中具有領導四列C11,C12,C13,C14
Sheet2中具有領導C21,C22,C23

報告2
Sheet1中有四列爲首C11三列C12,C13,C14(與報告1相同)
Sheet2有三列C21,C22,C23(與報告1相同)
Sheet3有三列,分別是C31,C32,C33,C34,C35,...。 .. ..

2)我希望能夠去除我應該進入兩個層次的報道某些列,見下圖:

1級:搜索工作表Sheet1並刪除C12,然後
搜索對於Sheet2中並刪除C22,然後 搜索表Sheet 3,並刪除C32

2級:搜索工作表Sheet1並刪除C11和C13,然後
搜索Sheet2中和去除C21和C22,然後 搜索Sheet3並刪除C33,C34,C35

3)我希望宏首先要求級別,然後搜索每個工作表,並期待每個列並將其刪除,如上所述。

希望有人可以幫助我這個宏。
非常感謝提前和聖誕快樂。

+0

是列標題總是將是每個表的第一行? – dash

+0

VBA不是VB6。有錯誤的問題。 – Bob77

+0

嗨! 不,他們會在第6行。 希望你能幫助我。 最好的問候 –

回答

2

使用下面的代碼。運行宏'選擇'來選擇級別。此代碼刪除整列,其中條件爲真

Sub Choose() 
    l = InputBox(Prompt:="Enter the level you want", Title:="Level Selection") 
    If l = 1 Then 
     Call Level1 
    ElseIf l = 2 Then 
     Level2 
    ElseIf l = "" Then 
    Else 
     MsgBox "Incorrect entry.", vbInformation, "Incorrect" 
    End If 
End Sub 

Sub Level1() 
    Application.ScreenUpdating = False 
    On Error Resume Next 
    Blad1.Activate 
    Blad1.Cells.Find(What:="C12", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate 
    i = ActiveCell.Column 
    Blad1.Columns(i).Delete 

    Blad2.Activate 
    Blad2.Cells.Find(What:="C22", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate 
    i = ActiveCell.Column 
    Blad2.Columns(i).Delete 

    Blad3.Activate 
    Blad3.Cells.Find(What:="C32", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate 
    i = ActiveCell.Column 
    Blad3.Columns(i).Delete 
    Blad1.Activate 
    Application.ScreenUpdating = True 
End Sub 


Sub Level2() 
    Application.ScreenUpdating = False 
    On Error Resume Next 
    Blad1.Activate 
    Blad1.Cells.Find(What:="C11", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate 
    i = ActiveCell.Column 
    Blad1.Columns(i).Delete 
    Blad1.Cells.Find(What:="C13", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate 
    i = ActiveCell.Column 
    Blad1.Columns(i).Delete 

    Blad2.Activate 
    Blad2.Cells.Find(What:="C21", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate 
    i = ActiveCell.Column 
    Blad2.Columns(i).Delete 
    Blad2.Cells.Find(What:="C22", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate 
    i = ActiveCell.Column 
    Blad2.Columns(i).Delete 

    Blad3.Activate 
    Blad3.Cells.Find(What:="C33", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate 
    i = ActiveCell.Column 
    Blad3.Columns(i).Delete 
    Blad3.Cells.Find(What:="C34", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate 
    i = ActiveCell.Column 
    Blad3.Columns(i).Delete 
    Blad3.Cells.Find(What:="C35", After:=ActiveCell, LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False).Activate 
    i = ActiveCell.Column 
    Blad3.Columns(i).Delete 
    Blad1.Activate 
    Application.ScreenUpdating = True 
End Sub 

see the file包括宏

+0

非常感謝Kannan的幫助! 現在我測試了宏,它要求Level,但是沒有任何反應。爲什麼? 最好的問候 –

+0

在提示你必須輸入你想要的水平。在輸入框中輸入1或2。然後點擊確定。單擊確定後,它將刪除指定條件存在的列。 – Ian

+0

而不是運行宏選擇,您可以直接運行Level1或Level2宏。 – Ian