Vba 选择sheet2和使用sheet1中的命令按钮查找最后使用的行的两种方法均失败

Vba 选择sheet2和使用sheet1中的命令按钮查找最后使用的行的两种方法均失败,vba,excel,excel-2007,excel-2013,Vba,Excel,Excel 2007,Excel 2013,我一直在尝试使用命令按钮单击宏从Sheet1中选择Sheet2。宏的最后一部分用于查找最后使用的行(偏移量为1),并使用MsgBox返回行号。我尝试了两种选择sheet2的方法。但是,在这两种情况下,MsgBox返回的数字都是sheet1的最后一行,而不是sheet2的最后一行。我之所以知道这一点,是因为当我更改列A中包含数据的最后一个单元格(即,将数据放置在不同的单元格中)时,MsgBox会提供新值(偏移量为1) 我猜错误可能是我使用了单元格。查找。我知道有几种可能的方法可以确定最后使用的行,

我一直在尝试使用命令按钮单击宏从Sheet1中选择Sheet2。宏的最后一部分用于查找最后使用的行(偏移量为1),并使用MsgBox返回行号。我尝试了两种选择sheet2的方法。但是,在这两种情况下,MsgBox返回的数字都是sheet1的最后一行,而不是sheet2的最后一行。我之所以知道这一点,是因为当我更改列A中包含数据的最后一个单元格(即,将数据放置在不同的单元格中)时,MsgBox会提供新值(偏移量为1)

我猜错误可能是我使用了单元格。查找。我知道有几种可能的方法可以确定最后使用的行,但从我读的单元格来看,Find方法是最可靠的。对我来说唯一明显的是,返回的行号来自Sheet1,而不是Sheet2。没有与此故障相关的错误消息

第一种方法是:

Private Sub CommandButton1_Click()
    Set wSheet = Worksheets("Sheet2")
    wSheet.Activate
        With wSheet
           unusedRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Offset(1, 0).Row
        End With
    MsgBox (unusedRow)
End Sub
Private Sub CommandButton1_Click()
    Application.Goto Reference:=Worksheets("Sheet2").Range("A1"),      Scroll:=True
    unusedRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Offset(1, 0).Row
    MsgBox (unusedRow)
End Sub
第二种方法是:

Private Sub CommandButton1_Click()
    Set wSheet = Worksheets("Sheet2")
    wSheet.Activate
        With wSheet
           unusedRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Offset(1, 0).Row
        End With
    MsgBox (unusedRow)
End Sub
Private Sub CommandButton1_Click()
    Application.Goto Reference:=Worksheets("Sheet2").Range("A1"),      Scroll:=True
    unusedRow = Cells.Find("*", [A1], , , xlByRows, xlPrevious).Offset(1, 0).Row
    MsgBox (unusedRow)
End Sub
有人能评论我代码中的错误吗?任何帮助都将不胜感激。我非常喜欢学习XL VBA

编辑:回复评论

非常感谢@Dan;你提到的这两本书我都读过。我还发现了另一个有用的讨论,我将挖掘链接并放在这里。我想我还没有完全适应语法,所以一些更微妙的变化仍然有点模糊。但是我已经明白了避免选择等的要点,尽管我只能偶尔到达那里。我想这是因为我经常使用宏录制器,它倾向于使用select系列


非常感谢@Tony-这是我需要的信息-宏现在运行良好,我对事情的理解稍微好一点。是的,我运行它时包含了Activate语句,它为我提供了Sheet1最后使用的行(偏移1);通过你的修订,我得到了第二张表的行号。再次感谢。

Siddharth Rout在这里整理了一篇关于查找最后一行的文章:,这将帮助您解决此问题。另外,Chris Neilsen在这里写了一篇关于不使用select或activate的非常好的文章:我已经尝试了第一个例程,它很有效。但是,如果希望由
With
语句控制,则
unusedRow=Cells
必须是
unusedRow=.Cells
。如果在
单元格
之前添加句点,则可以删除
wSheet.Activate
。添加
wSheet.Activate
后,您是否测试了此例程?