Я использую Microsoft Office Pro Plus 2016. У меня есть таблица (ListObject), которая является связанной таблицей Sharepoint, и пользовательская пользовательская форма, которая содержит 4 комбинированных списка (Region, Country, 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
Короче, я подумал, не могли бы вы рассмотреть, что я пытаюсь сделать (т.е. выполнитьрасширенный фильтр в моей таблице списков объектов, основанный на критериях комбинированных списков, и посоветуйте, где мне не хватает трюка, так как я занимался этим 2 дня и, кажется, ходил кругами.
Ваша помощь будеточень ценится, с Рождеством всех.