Excel VBA宏在调试器中运行良好,但在完整运行时出错

时间:2016-06-04 02:03:04

标签: excel vba excel-vba macros

运行以下代码时遇到的问题是,当我完全运行宏时(通过按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

1 个答案:

答案 0 :(得分:0)

我可以猜测,为了删除过滤器,必须确保它已经在工作表中设置了。 如果在工作表中"数据"没有过滤器,删除它的行将返回错误。因此,我建议在此行之前插入一行:

On Error Resume next

因此,在"删除过滤器"我会写

On Error Goto -1