【发布时间】:2021-01-19 07:36:35
【问题描述】:
我选择了要在组合框中显示的范围。 代码如下。
Sheet5.Activate
ActiveSheet.ListObjects("Table6").Range.AutoFilter Field:=1, Criteria1:= _
"=*E*", Operator:=xlAnd
Range("A1").Select
ActiveCell.Offset(1, 2).Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
在不改变上面代码的情况下,有没有办法改变下面的代码来选择Selection.Copy?
或者有没有办法将Range(Selection, Selection.End(xlDown)) 部分更改为Selection.Copy 以上?
With cbE
Me.cbE.List = Worksheets("EMP").Range(Selection, Selection.End(xlDown)).Value
End With
如何从表格中过滤掉行(基于包含特定文本的第 1 列)并在组合框中显示过滤列(第 4 过滤列)?
更新
With Sheet4
Dim lastRow As Long
lastRow = .Cells(.Rows.Count, 1).End(xlUp).Row
Dim filterRange As Range
Set filterRange = .Range("A2:A" & lastRow)
With filterRange
.AutoFilter 1, "E"
Dim filterE As Range
Set filterE = .Range("A1:A" & lastRow).Columns(5).SpecialCells(xlCellTypeVisible)
End With
End With
Me.cbE.List = Worksheets("EMP&Customers").Range(filterE, filterE.End(xlDown)).Value
上面是我拥有的最新代码,它工作正常,除了第一个和最后一个过滤单元格之间的任何单元格也将在组合框中可见。
【问题讨论】:
-
不,您只能参考所选范围。一旦您复制它并选择其他内容,Excel 就无法再分辨剪贴板中的哪个范围了。 • 实际上,您的问题似乎是X/Y problem:您要求X,但您的问题是Y。请edit 并包括您实际想要实现的目标。 • 还要确保不要使用
.Activate和.Select这是一个非常糟糕的做法:请参阅How to avoid using Select in Excel VBA。 -
在用范围填充组合之前假设过滤是错误的,您需要用过滤后的范围填充组合?如果是,理论上你应该使用
SpecialCells(xlCellTypeVisible),但是如果你尝试使用List来处理这样一个不连续的范围,它只会加载它的第一个区域。您应该处理范围以使其现有区域成为连续的范围。那么,为了这样的目的而选择,只是消耗Excel资源而没有带来任何好处的事情...... -
好的,如果我要改变我的问题。如何从表格中过滤掉行(包含特定文本的第一列)并在组合框中显示过滤列(第 4 过滤列)?
-
@HyunE 你做了一些研究吗?互联网上充满了如何用过滤值填充组合框的示例。
-
我已经在这个问题上纠结了好几个小时。如果我可以简单地用谷歌搜索并找到解决方案,就不会在这里问。所以请不要那样跟我说话。