2014-11-14 120 views
0

我有一个运行时错误91,我不知道为什么。我将这段代码用于一个不同的工作簿,它的工作原理非常完美,列中的信息与我正在提取的不同,但我将所有列和范围都更改为正确的列,但现在我在这里以及唯一一个区别在于,请帮忙!运行时错误91

Range(Cells(20, 1), Cells(LastRow, LastCol)).Select 
    Selection.AutoFilter 
    Range("C2").Select 

即开始,但这里是哪里发生了错误:

ActiveWorkbook.Worksheets(msheet).AutoFilter.Sort.SortFields. _ 
     Add Key:=Range("A20:A" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, _ 
     DataOption:=xlSortNormal 

请帮帮忙,我不知道我错过了什么。谢谢!

这里是代码的开头:

Sub getdata() 
Dim mastername As String 
Dim count As Long 
Dim match As Long 
Dim repeat As Long 
Dim path As String 
Dim status As String 
Dim name As String 
Dim mpath As String 
Dim cpath As String 
Dim LastRow As Long 
Dim LastCol As Integer 
Dim mbank As String 
Dim mname As String 

mpath = Sheets("Master log").Cells(14, "W").Value 
mname = Sheets("Master log").Cells(15, "W").Value 
msheet = Sheets("Master log").Cells(16, "W").Value 
Sheets("MGPR1").Range("A1:AA50000").ClearContents 

name = Application.ActiveWorkbook.name 
cpath = Application.ActiveWorkbook.path & "\" 

Windows(name).Activate 

'--open Management report workbook if not already open 
If CheckFileIsOpen(mname) = False Then 
Workbooks.Open mpath & mname 
End If 
'------------------------------------------- 

Windows(mname).Activate 
    Sheets(msheet).Select 

    'select full data 

    With ActiveSheet 
     LastRow = .Cells(.Rows.count, "A").End(xlUp).Row 
    End With 

    With ActiveSheet 
     ' LastCol = .Cells(1, .Columns.count).End(xlToLeft).Column 
     LastCol = 20 
    End With 
+1

需要更多的细节。你的第一个代码看起来像是对大范围进行排序,但是你的第二个代码只是对列A进行排序。另外,什么是'msheet'?它是你定义的变量吗?如果它是工作表的名称,那么使用'Sheets(“msheet”)' – Chrismas007 2014-11-14 21:38:47

+0

根据错误,我认为它与'msheet'周围缺少引号有关。 – Chrismas007 2014-11-14 21:41:52

+0

Dim s As Worksheet Set s = Worksheets(1)... msheet可以是索引吗? – dee 2014-11-14 21:46:22

回答

0

错误的含义是:

91 - 对象变量未设置

这是钝的链涉及的对象。这是一个记录宏,它可以处理你正在尝试做的事情。如果有疑问,将复杂的陈述展开为简单的陈述。

也总是做一个Msgbox Vartype(whatever):Msgbox IsEmpty(whatever):msgbox IsNull(whatever)。这可以让你检查什么是假设。

Range("A1:G19").Select 
Selection.AutoFilter 
Selection.AutoFilter Field:=3, Criteria1:="<>sub", Operator:=xlAnd 
Selection.Sort Key1:=Range("C1"), Order1:=xlAscending, Header:=xlGuess, _ 
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _ 
    DataOption1:=xlSortNormal 
Range("H34").Select 
+0

她并没有问错误是什么意思。她在问如何修正她的代码。 – Chrismas007 2014-11-14 21:40:45

+2

这是不正确的。这个问题意味着错误91的含义是未知的。这是一个答案,但它可能更完整。 – JasonMArcher 2014-11-14 22:00:32

+0

你说得对。我没有留下分配的变量,我可能应该补充说。我将代码的开头添加到顶部。我知道错误意味着对象变量没有设置,但我觉得它是。显然我可能是错的。 – Lillian 2014-11-14 22:11:31

1

您必须参考range("A20.....")或其在活动页面中的表格。

喜欢的东西sh.range("..."),或使用with节这样的例子:

with ActiveWorkbook.Worksheets(msheet) 
    .AutoFilter.Sort.SortFields. _ 
    Add Key:= .Range("A20:A" & LastRow), SortOn:=xlSortOnValues, Order:=xlAscending, _ 
    DataOption:=xlSortNormal 
end with 

也帮助引用,并且停止使用激活/选择:

Dim Wb as Workbook 
Dim Sh as Worksheet 

'other code, i just write the needed code now 
set wb = Workbooks.Open mpath & mname 
set Sh = wb.Sheets(msheet) 

with Sh 

    LastRow = .Cells(.Rows.count, "A").End(xlUp).Row 
    'lots of stuff to do (....) please wait , computing .... error/no really i try to be serious here! 
end with