运行以下代码时遇到的问题是,当我完全运行宏时(通过按F5,从分配给它的按钮调用它,或从宏栏运行它),我收到:
运行时错误' 91':对象变量或未设置块变量。
然而,当我逐行运行调试器时,代码运行得非常好。在下面的代码中,调试器中突出显示的行在asteriks" ... code ... "中列出。和LastRow.Sheet1.Columns一起存在......
这个宏的基本前提是它会自动对列进行排序,以确保条目位于我在另一个工作表上的表单控件列表框的顶部。第二部分代码(下面的' PopulateListBox)用于将这些数据点拉入列表框。
非常感谢您提供的任何帮助。
代码:
Sub Filter
Sheet2.Select
ActiveWorkbook.Worksheets("Data").Autofilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Data").Autofilter.Sort.SortFields.Add _
Key:=Range("K2"), SortOn:=xlSortOnValues, Order:=xlDescending, _
DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Data").Autofilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
Sheet1.Columns("M").ClearContents
Sheet2.Columns("Z").ClearContents
Sheet1.Columns("L").Copy
Sheet1.Columns("M").PasteSpecial xlPasteValues
Sheet2.Columns("Z").PasteSpecial xlPasteValues
SendKeys ("{ESC}")
Sheet1.Range("M1") = "Hardcoded Values"
Sheet2.Range("A1").Select
'PopulateListBox
Set lb = Sheet2.Shapes("List Box 1")
Dim LastRow As Integer
**LastRow = Sheet1.Columns("M").Find("*", SearchDirection:=xlPrevious, SearchOrder:=xlByRows, LookIn:=xlValues).Row**
'MsgBox LastRow 'used to verify the above code was working correctly, commented out to speed up process
lb.ControlFormat.RemoveAllItems
lb.ControlFormat.ListFillRange = "Z2:Z" & LastRow
End Sub
答案 0 :(得分:0)
我可以猜测,为了删除过滤器,必须确保它已经在工作表中设置了。 如果在工作表中"数据"没有过滤器,删除它的行将返回错误。因此,我建议在此行之前插入一行:
On Error Resume next
因此,在"删除过滤器"我会写
On Error Goto -1