我一直在尝试使用命令按钮单击宏从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的行号。再次感谢。