宏解释

时间:2014-06-03 15:14:45

标签: excel vba excel-vba

我正在研究如何在VBA的帮助下创建快捷方式。宏基本上允许我根据单元格的值过滤范围。我在互联网上找到了这个宏

 Public Sub FilterOnCellValue()
        Dim nField As Long
        With ActiveCell
            nField = .Column - .CurrentRegion.Cells(1).Column + 1
            .CurrentRegion.AutoFilter Field:=nField, Criteria1:=.Value
        End With
    End Sub

代码工作正常,但我很难理解这个家伙是如何创造的。所以我到目前为止所知道的是这些人正在创建一个变量。但由于某种原因,变量不是字符串格式,而是长期"当我根据单元格中的文本进行过滤时,代码可以正常工作。我认为那个长期只能用于数字,如果我错了就纠正我(我认为我是:))。其次。怎么了.column - .currentregion. cells.....+1?我真的不知道他在那里做了什么。

非常感谢这里的一些帮助。到目前为止,论坛对我来说非常有用。

1 个答案:

答案 0 :(得分:1)

理解任何事情的秘诀就是将其分解为部分

无论如何,documentation of Autofilter表示

   Public Sub FilterOnCellValue()
                Dim nField As Long
                With ActiveCell
               '.Column: Column Number i.e  A=1,B=2 etc
               '.CurrentRegion.Cells(1).Column: Gets the col No of the firstcell of the data region          
               nField = .Column - .CurrentRegion.Cells(1).Column+1
               'Autofilter takes column number as the parameter 
               'see example below
               'nField: gets the col number of the filter value within the region
               ' leftmost field is 1 hence +1                  
                .CurrentRegion.AutoFilter Field:=nField, Criteria1:=.Value
                End With
            End Sub

例如,如果您的数据采用这种格式

     A      B
1    ID   Value
2    1    Apple
3    2    Orange
4    3    Banana
5    4    Apple
6    5    Banana

假设您单击单元格B5(Apple)并运行宏

  1. 宏首先获取所选单元格的列号= 2

  2. 检查当前区域(A1:B6)第一个单元格(ID)所在的列= 1

  3. 计算步骤1 - 步骤2中的值以获得所选值所在的列,相对于区域(A1:B6),想法是使用.column作为参考来查找列号区域结果中所选值的选择:2-1 + 1 = 2

  4. 过滤区域A1:B6中步骤3(在我们的示例值为2)中传递的列号,用于所选值(Apple)

  5. 希望这有帮助