2014-11-14 148 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