如何在Excel项目中创建宏

时间:2011-12-10 17:05:44

标签: excel excel-vba vba

我对VBA比较陌生 如果有人能帮我解决下面的问题,我将不胜感激:

1)我有一个Web应用程序,它生成两个不同的Excel报告,包含不同数量的叶子和不同的列数,见下文。

报告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,然后 搜索Sheet3并删除C32

等级2 :搜索Sheet1并删除C11和C13,然后执行
搜索Sheet2并删除C21和C22,然后 搜索Sheet3并删除C33,C34,C35

3)我希望宏首先询问级别,然后搜索每个工作表并查看每个列并按上述方法将其删除。

希望有人可以帮我解决这个问题 非常感谢提前和圣诞快乐。

1 个答案:

答案 0 :(得分: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包括宏