【问题标题】:Can I set a dynamic range in vba excel to use in filter我可以在 vba excel 中设置动态范围以在过滤器中使用吗
【发布时间】:2020-01-09 23:09:32
【问题描述】:

以下 excel 子是一个过滤器,它根据条件行中的行过滤掉行。 当使用绝对数据设置范围时,该代码运行良好。我想更改代码以从存储为单元格值(间接引用)的引用中获取范围,但我找不到一种方法来调整我看到的其他代码 sn-ps 工作,我想知道是否有人可以帮助我。我不是程序员。

问题在于,随着不时插入新数据,范围引用将移动,并且相关过滤器的数据的开始位于单元格中(使用 RC 表示法 14,14)和单元格中的数据 13,12 .虽然我知道我不能在 vba 中使用间接函数,但我想知道是否有一种方法可以动态分配范围以使用 Advance 过滤器函数。 我有代码可以找到数据块的最后一列和最后一行。 我已经尝试了以下代码(2次尝试),但它不会让我以这种方式使用对象 我试图将单元格引用创建为字符串,然后使用 range 函数对其进行分配。然后,我阅读了一个答案,其中有人将单元格的值直接放入范围函数中,并且对他们有用(他们正在复制单元格)。两次尝试大致相同,但在第二次尝试中我试图更具体。 问题似乎是,一旦我从范围声明中的绝对参考“A50”更改,范围就不再起作用。我不确定如何解决这个问题,也许不可能

知道被过滤的数据是姓名和电话数据的行以及显示出勤率的统计系统可能会有所帮助(一年中每周一列) 具有动态数据的单元格以 A1 而非 RC 格式保存它们

Sub UseAdvancedFilterInPlace()
'This version of the sub has absolute references and works perfectly
Dim rdData As Range
Dim rgcriteria As Range
Call TurnOffStuff
Set rgData = Sheet9.Range(“A50”).CurrentRegion
Set rgcriteria = Sheet9.Range(“A46”).CurrentRegion
rgData.AdvancedFilter xlFilterInPlace, rgcriteria
Call TurnOnStuff
End Sub

Sub UseAdvancedFilterInPlace()
'This version of the sub has dynamic references and fails
Dim rdData As Range
Dim rgcriteria As Range
Call TurnOffStuff
Dim Top_of_data As String
Dim Top_of_Criteria As String
Dim My_range As Range
‘Attempt 1
'Set rgData = Range(Sheet9.Cells(13, 12).Value).CurrentRegion
'Set rgcriteria = Range(Sheet9.Cells(14, 14).Value).CurrentRegion
'Attempt 2
Set rgData = Sheet9.Range(Sheet9.Range(Cells(13, 12)).Value).CurrentRegion
Set rgcriteria = Sheet9.Range(Sheet9.Range(Cells(14, 14)).Value).CurrentRegion

rgData.AdvancedFilter xlFilterInPlace, rgcriteria
Call TurnOnStuff

End Sub

我得到的实际错误消息是应用程序定义的或对象定义的错误

【问题讨论】:

  • 子程序TurnOffstuff和TurnOnStuff,简单的禁用和启用屏幕更新并将计算设置为手动以加快处理速度。
  • 您想将哪些单元格设置为 rgData,哪些单元格设置为 rgcriteria?
  • 另请注意,您声明了 rdData 但您使用了 rgData。
  • 我已经重新测试了将变量名称更正为始终一致的 rdData。
  • rdData 是要过滤的数据(即电话号码和计票,rgCriteria 是过滤器要使用的条件。所以例如我会在 rgCriteria 的名称列中设置 John它会过滤 rgdata 中的数据以仅给出以 john 为名称的行。我希望这更清楚。

标签: excel vba range


【解决方案1】:

这对我有用。

Set rdData = Sheet9.Range(Sheet9.Range("L13").Value).CurrentRegion
Set rgcriteria = Sheet9.Range(Sheet9.Range("N15").Value).CurrentRegion

假设Range("L13").Value 是A50,Range("N15").Value 是A46。

额外:在每个模块的第一行中使用语句Option Explicit,在每个子或函数之外。此选项会在未声明的变量上引发错误,并将帮助您避免对变量进行重命名错误。

【讨论】:

  • 谢谢你试过这个,效果很好。我注意到我在单元格引用方面也犯了一个错误,它应该是 A51,并且使用您的代码提供不同的 RC 使其更具可读性。谢谢你的帮助。我已将其标记为解决方案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多