【发布时间】:2018-12-13 16:42:59
【问题描述】:
我使用的是 Microsoft Office Pro Plus 2016。我有一个表 (ListObject),它是一个 Sharepoint 链接表和一个自定义用户窗体,其中包含 4 个组合框(区域、国家、IMType 和 LOB)。
我试图应用的逻辑是用户表单将自己呈现给用户,在后台它“取消过滤”列表。然后,最终用户可以在用户表单中选择标准,单击“确定”后,它将组合框的值输入到工作表的“标准”部分,然后执行高级过滤器。下图示例
以下是我要过滤的工作表的屏幕截图
诚然,在尝试了很多不同的方法来雕刻这只火鸡后,我已经迷失了我为解决这个问题而编写的各种不同的代码,其中一些我已经粘贴在下面,但我真的很欢迎一个闪亮的骑士穿着韵律盔甲,引导我远离这里的疯狂。我目前有两个问题:
1) 我收到“对象变量或未设置块变量”消息,并且表单使用这段代码初始化。有什么原因吗?
With FilterForm
.StartUpPosition = 0
.Left = Application.Left + (0.5 * Application.Width) - (0.5 * .Width)
.Top = Application.Top + (0.5 * Application.Height) - (0.5 * .Height)
.Show
End With
发布表单初始化并在用户表单上单击“确定”后,运行以下代码:
Private Sub cmdOK_Click()
Dim myTable As ListObject
Set myTable = ActiveSheet.ListObjects("MIMSPData")
Call AutoFilterCheck
Application.ScreenUpdating = False
Sheets("MIM Policy Governance Tracking").Range("AJ7").Value = ""
Sheets("MIM Policy Governance Tracking").Range("AK7").Value = ""
Sheets("MIM Policy Governance Tracking").Range("AL7").Value = ""
Sheets("MIM Policy Governance Tracking").Range("AM7").Value = ""
' Range("'MIM Policy Governance Tracking'!MIMSPData").AdvancedFilter _
' Action:=xlFilterInPlace, CriteriaRange:=Range("AI6:BK7"), Unique:=False
Call AdvancedFilteronSPData
Sheets("MIM Policy Governance Tracking").Range("AJ7").Value = ComboBox1.Value
Sheets("MIM Policy Governance Tracking").Range("AK7").Value = ComboBox2.Value
Sheets("MIM Policy Governance Tracking").Range("AL7").Value = ComboBox3.Value
Sheets("MIM Policy Governance Tracking").Range("AM7").Value = ComboBox4.Value
' Range("'MIM Policy Governance Tracking'!MIMSPData").AdvancedFilter _
' Action:=xlFilterInPlace, CriteriaRange:=Range("AI6:BK7"), Unique:=False
Call AdvancedFilteronSPData
Unload Me
Application.ScreenUpdating = True
End Sub
它引用的 VB 代码(AutoFilterCheck 和 AdvancedFilteronSPData)粘贴在下面,对我来说这是一个较晚的尝试,以解决自动过滤器代码似乎无法正常工作的事实。它们粘贴在下面以供参考:
Sub AutoFilterCheck()
Dim myTable As ListObject
Set myTable = ActiveSheet.ListObjects("MIMSPData")
With ActiveSheet
.AutoFilterMode = False
.Range("MIMSPData").AutoFilter
End With
End Sub
最后一个
Sub AdvancedFilteronSPData()
Dim myTable As ListObject
Set myTable = ActiveSheet.ListObjects("MIMSPData")
Range("MIMSPData").AdvancedFilter Action:=xlFilterInPlace, _
CriteriaRange:=Range("AI6:BK7"), Unique:=False
End Sub
简而言之,我想知道您是否可以查看我正在尝试做的事情(即根据组合框标准在我的 listobject 表上执行高级过滤器,并告知我在哪里错过了一个技巧,因为我一直在这里呆了 2 天,似乎在绕圈子。
非常感谢您的帮助,祝大家圣诞快乐。
【问题讨论】:
-
对于第一个错误,您只需将 filterform.show 代码放在将显示用户表单的另一部分!
-
更新:所以我记录了手动执行高级过滤器的步骤(数据 > 高级),我注意到在代码中,它将我的列表对象引用为“外部数据”,见下文。我想知道这是否与我的问题有关?
-
谢谢 Imran,我会把它放在一个模块中并调用它。好建议:)
标签: excel vba userform autofilter