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

时间:2014-06-29 02:39:08

标签: excel vba excel-vba excel-2007 excel-2013

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

我猜错误可能在于我对Cells.Find的使用。我知道有几种可能的方法来确定最后使用过的行但是从我读过的Cells.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

有人可以评论我的代码中的任何错误吗?任何帮助将不胜感激。我非常喜欢XL VBA。

编辑:对评论的回复

非常感谢@Dan;我已经阅读了你引用的那些作品。还有另一个有用的讨论,我发现我将挖掘链接并放在这里。我认为我还没有在相当基础的水平上调整语法,所以一些更微妙的变化仍然有点模糊。但我有一点关于避免选择等等,虽然我有时只能到达那里。我想这是因为我经常使用往往使用select系列的宏录制器。

非常感谢@Tony - 这是我需要的信息 - 宏现在工作得很好,我理解的东西好一点。是的,我确实使用包含的Activate语句运行它,它给了我Sheet1的最后一行(偏移1);在您的修订版中,我获得了Sheet2的行号。再次感谢。

0 个答案:

没有答案