2012-08-25 99 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很好解释。 –

相关问题