繁体   English   中英

我可以在VBA Excel中设置动态范围以在过滤器中使用吗

[英]Can I set a dynamic range in vba excel to use in filter

以下excel子项是一个过滤器,用于根据条件行中的行过滤出行。 当使用绝对数据设置范围时,该代码可以很好地工作。 我想更改代码以从存储为单元格值的引用(间接引用)中获取范围,但是我找不到一种方法来适应我认为有效的其他代码段,并且我想知道是否有人可以帮助我。 我不是程序员。

问题在于,随着不时插入新数据,范围参考将移动并且数据的开始以及相关联的过滤器位于单元格中(使用RC标记14,14)以及单元格13,12中的数据。 虽然我知道我无法在vba中使用间接函数,但我想知道是否有一种方法可以动态分配范围以使用高级过滤器功能。 我有找到数据块的最后一列和一行的代码。 我已经尝试了以下代码(两次尝试),但是它不允许我以此方式使用对象,而是尝试将单元格引用创建为字符串,然后使用range函数进行分配。 然后,我读了一个答案,有人将单元格的值直接放入range函数中,并且对他们有用(他们正在复制单元格)。 两次尝试大致相同,但是第二次尝试更加具体。 问题似乎是我从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

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

这对我有用。

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。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM