2012-08-25 133 views
2

摘要:我正在寫一個宏,它從excel文件中的許多不同工作表取得名稱並將它們一起編譯在「主列表」上,但我正在在另一張紙上引用單元格時遇到問題。VBA引用單元格使用工作表名稱不正常

問題:當我使用表格名稱作爲參考Sheets("MasterList").ActiveCell.Offset(0, 1)引用特定單元格時,沒有任何東西被拾取。但是,當我刪除Sheets("MasterList")宏正常工作(該宏當前正在「MasterList」,這是唯一的方法)。此外,我的代碼中拼寫名稱的拼寫正確。

問題:爲什麼會發生這種情況?代碼背後的邏輯看起來很合理,我正確地拼寫我的表名。

代碼:

Do    

    If Sheets("MasterList").ActiveCell.Offset(0, 1) = firstName Then  'IF FIRST AND LAST NAMES MATCH, EXIT THE CHECK 

      Exit Do 

    End If 

    On Error Resume Next 

    Cells.Find(What:=lastName, After:=ActiveCell, LookIn:=xlFormulas, _ 
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
    MatchCase:=False, SearchFormat:=False).Activate 

Loop Until Err.Number > 0 
+0

Activecell是Excel應用程序對象的屬性,而不是工作表。它表示當前活動窗口中的活動單元格。 –

+1

+1像往常一樣很好地解釋了問題。除蒂姆/克里斯提到的兩件事。 1)'ON ERROR RESUME NEXT'將其從代碼中拋出。除非您將它用作「主動」編程,否則應避免使用OERN。 2)我會建議使用這個鏈接,解釋如何使用'.Find'和'.FindNext' http://siddharthrout.wordpress.com/2011/07/14/find-and-findnext-in-excel-vba/ –

+0

@SiddharthRout像往常一樣,有用的材料:D +1。查找教程將對我非常有幫助。關於擺脫OERN,我不確定如果find函數沒有找到它所要查找的內容,find函數將如何工作,但我相信這是在你的教程中解釋的:p –

回答

5

ActiveCellApplication對象的屬性,而不是一個Sheet

只有一個ActiveCell,它是當前活動工作表上的活動單元格。

這並不完全清楚你想要做什麼。但一般而言,您應該避免使用這種代碼SelectActivate。改用財產以後這樣的:

Dim wsMasterList as Worksheet 
Set wsMasterList = Thisworkbook.WorkSheets("MasterList") ' assuming the vba code is in the workbook containing MasterList 

跟蹤MasterList上次使用的電池使用可變像

Dim rMasterList as Range 
Set rMasterList = wsMasterList.Cells(... ' Specify the cell you want 

然後使用rMasterList.Offset(0, 1)指相對於電池

搜索上MasterList使用細胞:

Dim cl as Range 
Set cl = wsMasterList.UsedRange.Find(...) 
If Not cl Is Nothing Then 
    ' cl will be Nothing if the search term is not found 
    ' ... 
+0

+ 1很好解釋。 –

相關問題