日韩黑丝制服一区视频播放|日韩欧美人妻丝袜视频在线观看|九九影院一级蜜桃|亚洲中文在线导航|青草草视频在线观看|婷婷五月色伊人网站|日本一区二区在线|国产AV一二三四区毛片|正在播放久草视频|亚洲色图精品一区

分享

【軟件】3個Excel?VBA示例(自動組合\篩選\保護(hù))

 hanzinu 2011-05-02

【軟件】3個Excel VBA示例(自動組合\篩選\保護(hù))

(2010-12-21 14:17:46)

   在前一篇SSRS report builder的示例中,通過一些小設(shè)置就能輕松實現(xiàn)Web報表組合字段的展開與折疊,這里,受這個特性啟發(fā),運(yùn)用VBA代碼,在Excel中設(shè)計一個類似功能的示例,實現(xiàn):

1)自動組合地區(qū)、產(chǎn)品,默認(rèn)按小計折疊顯示(圖一),優(yōu)點是節(jié)省手工設(shè)組合行的時間,并支持動態(tài)數(shù)據(jù)。 

2)按地區(qū)條件實現(xiàn)篩選(圖二),之前有幾個用公式實現(xiàn)篩選的示例,實現(xiàn)上有些復(fù)雜,VBA可簡化許多。

3)報表區(qū)域?qū)崿F(xiàn)保護(hù),即只讀,不可編輯。Excel設(shè)了保護(hù)后,組合展開/折疊(+/-)也被保護(hù)了,需使用一個技巧,保護(hù)報表數(shù)據(jù)的同時解除組合展開/折疊的保護(hù)。

環(huán)境:Excel 2010

預(yù)備知識:Excel組合功能(group/ungroup/outline等)

1 示例一: 自動組合地區(qū)、產(chǎn)品,默認(rèn)顯示各地區(qū)產(chǎn)品銷售小計

圖一:

【軟件】3個Excel <wbr>VBA示例(自動組合\篩選\保護(hù))

1)設(shè)計一個數(shù)據(jù)表,包含地區(qū)銷售小計,產(chǎn)品銷售小計及各產(chǎn)品子類的銷售額,例如圖二所示。

2)在模塊(Module1)中,設(shè)計一個名為DatarowsGroup的過程,兩個循環(huán)段分別實現(xiàn)按地區(qū)組合行,再按產(chǎn)品組合行,并以小計級別(級別2)默認(rèn)顯示。

Sub DatarowsGroup()
    'Author       :
http://blog.sina.com.cn/lightonlife
    'Macro purpose: automatic to group region and product category data

    Dim i As Integer
    Dim j As Integer
    Dim rowA As Integer
    Dim rowB As Integer
   
    rowA = 4
    rowB = 4
   
    Application.ScreenUpdating = False
    Application.StatusBar = ""
    
    For i = 4 To Sheets("Report").UsedRange.Rows.count
        If IsEmpty(Sheets("Report").Range("A" & i).Value) = False Then
            If Right(Sheets("Report").Range("A" & i).Value, 5) = "Total" And Sheets("Report").Range("A" & i).Value <> "Grand Total" Then
               
Sheets("Report").Range("A" & rowA & ":A" & i - 1).Rows.group
                rowA = i + 1
            End If
        End If
    Next i
   
    For j = 4 To Sheets("Report").UsedRange.Rows.count
        If IsEmpty(Sheets("Report").Range("B" & j).Value) = False Then
            If Right(Sheets("Report").Range("B" & j).Value, 5) = "Total" Then
               
Sheets("Report").Range("B" & rowB & ":B" & j - 1).Rows.group
                rowB = j + 1
            End If
        End If
    Next j
   
    Sheets("Report").Outline.ShowLevels RowLevels:=2 
End Sub

3)在模塊(Module1)中,設(shè)計一個名為RemoveDatarowsGroup的過程,清除所有的組合,關(guān)鍵代碼:

    Sheets("Report").Range("A2").ClearOutline
4)在thisWorkbook workbook open事件中,調(diào)用這兩個模塊過程,實現(xiàn)每次打開Excel文件,自動顯示地區(qū)、產(chǎn)品銷售小計。

Private Sub Workbook_Open()  
    Call RemoveDatarowsGroup
    Call DatarowsGroup
 End Sub

2 示例二:使用VBA代碼按地區(qū)條件篩選銷售信息

圖二:

【軟件】3個Excel <wbr>VBA示例(自動組合\篩選\保護(hù))

1)設(shè)計一個地區(qū)(Region)下拉菜單,作為篩選條件,如何實現(xiàn),請參閱相關(guān)博文。

2)在這個下拉菜單的change事件中,編寫下列代碼,顯示符合條件/隱藏不符合條件的行記錄是VBA實現(xiàn)篩選的基本思路。這段代碼大意是:先隱藏報表數(shù)據(jù)區(qū)所有行記錄,如果選全部,則顯示所有隱藏的行記錄,如果選某個地區(qū)條件,則顯示該地區(qū)第一條至最后一條的記錄(由條件語句控制)。

Private Sub ComboBox1_Change()
    'Author       :
http://blog.sina.com.cn/lightonlife
    'Macro purpose: filter based on region dropdown
   
    Dim i As Integer
    Dim strCategory As String
    Dim firstRow As Integer
    Dim lastRow As Integer
   
    firstRow = 0
    Application.ScreenUpdating = False
    Sheets("Report").Protect Contents:=False
   
   
strCategory = Sheets("Report").ComboBox1.Text
   
Sheets("Report").Rows(4 & ":" & Sheets("Report").UsedRange.Rows.count).Hidden = True
   
   
If strCategory = "ALL" Then
       
Sheets("Report").Rows(4 & ":" & Sheets("Report").UsedRange.Rows.count).Hidden = False
    End If
   
    For i = 4 To Sheets("Report").UsedRange.Rows.count
        If Sheets("Report").Range("A" & i).Value = strCategory Then
            firstRow = i
        End If
       
        If Sheets("Report").Range("A" & i).Value = strCategory & " Total" Then
            lastRow = i
        End If
    Next i
   
    If firstRow <> 0 And lastRow <> 0 Then
       
Sheets("Report").Rows(firstRow & ":" & lastRow).Hidden = False
    End If
   
    Sheets("Report").Protect Contents:=True
End Sub


3 示例三:保護(hù)報表中的數(shù)據(jù)

1)在模塊(Module1)中,設(shè)計一個名為protectCells的過程,設(shè)保護(hù)區(qū)域(locked ture),也可設(shè)未保護(hù)、可編輯區(qū)域(locked false),并將保護(hù)選項設(shè)為True
Sub protectCells()
    'Author       :
http://blog.sina.com.cn/lightonlife
    'Macro purpose: set protected/unprotected cells
    Dim i As Integer
       
    Application.ScreenUpdating = False
    Application.StatusBar = ""
   
 
    i = Sheets("Report").UsedRange.Rows.count
   
   
Sheets("Report").Rows(4 & ":" & i).Locked = True
    Sheets("Report").Range("A1").Locked = False
    Sheets("Report").Protect Contents:=True

End Sub 

2) 更新thisWorkbook workbook open事件,加入保護(hù)代碼。先要解保護(hù),組合功能才有效,執(zhí)行完保護(hù)過程后,需要利用代碼(高亮語句)解除組合展開/折疊的保護(hù)。

Private Sub Workbook_Open()
    'Author       :
http://blog.sina.com.cn/lightonlife
    'Macro purpose: initiate worksheet
   
   
Sheets("Report").Protect Contents:=False
   
    Call RemoveDatarowsGroup
    Call DatarowsGroup
    Call protectCells
   
Sheets("Report").Protect Password:="", userinterfaceonly:=True
    Sheets("Report").EnableOutlining = True

End Sub

 

我的更多文章:

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多