VBA:从另一个工作表获取参考值作为筛选条件

时间:2018-07-02 06:26:29

标签: excel-vba vba excel

我有两张纸-“条件”和“临时”。

我想在“条件”表中应用过滤器,其中条件将从“临时”表的活动单元格中获取。我的下方宏由于某种原因而失败。

Sub FilterTest1()
ActiveWorkbook.Sheets.Add After:=Worksheets(Worksheets.Count)
ActiveSheet.Name = "temporary"

ActiveSheet.[A:A].Value = Worksheets("Criteria").[A:A].Value

Cells.RemoveDuplicates Columns:=Array(1)

Range("A1").EntireRow.Delete

Dim B As Integer
B = Cells.CurrentRegion.Rows.Count

With Sheets("Temporary")
Selection.End(xlDown).Select
End With


With Sheets("Criteria")

.Range("$A:$B").AutoFilter
   .Range("$A:$B").AutoFilter field:=1, Criteria1:=Worksheets("temporary").ActiveCell.Value, Operator:=xlOr

End With

End Sub

宏以

结尾
  

运行时错误438“对象不支持此属性或方法。

正确的方法是什么?

添加更多信息:目标是逐一更改标准。现在,它应该在Temporary!A:A中选择最后一个活动单元格,但是稍后我将在Temporary!A:A中向上偏移选择,并将每个活动单元格工作表作为过滤标准。

1 个答案:

答案 0 :(得分:0)

将Temporary!A:A中的最后一个值应用于var比依赖Select和Selection更容易。

但是,您的所有代码似乎都归结为使用Criteria!A:A中的最后一个值作为过滤器的AutoFilter。添加一个新的工作表,复制Criteria!A:A中的值,删除重复项,然后选择Temporary!A:A中最后一个填充的单元格无济于事。如果您在Temporary!A:A中对数据进行排序,则它可能会更改,但是您当前所做的只是更改Criteria!A:A中填充的最后一个值中的条件。

s = data_set[data_set['img_type'].isin(['bias'])].groupby('CCD-TEMP')['mean'].mean()
print (s)
CCD-TEMP
-15    1021.66875
-10    1023.92840
Name: mean, dtype: float64

data_set['Offset'] = data_set['CCD-TEMP'].map(s)
print (data_set)
    CCD-TEMP  explen img_type       mean      Offset
0        -10       0     bias  1023.4234  1023.92840
1        -10       0     bias  1024.4334  1023.92840
2        -15       0     bias  1022.2344  1021.66875
3        -15       0     bias  1021.1031  1021.66875
4        -10      30     dark  1025.9959  1023.92840
5        -10      30     dark  1023.3434  1023.92840
6        -10      60     dark  1020.1234  1023.92840
7        -10      60     dark  1022.4234  1023.92840
8        -15      30     dark  1025.9959  1021.66875
9        -15      30     dark  1023.3434  1021.66875
10       -15      60     dark  1020.1234  1021.66875
11       -15      60     dark  1022.4234  1021.66875